Est-ce que window.state = ‘fullscreen’ d’un script d’arrière-plan est censé fonctionner?

Travailler avec Xubuntu 14.04 et Firefox 45.0.1 ici

J’essaie de placer automatiquement une fenêtre de navigateur dans un état plein écran à partir d’un script d’arrière-plan, si location.hash == "#fullscreen" .

Cela est demandé à partir d’un script de page Web privilégié en effectuant un postMessage() écoute d’un script de contenu, qui à son tour délègue cette requête au script d’arrière-plan.

Tout fonctionne comme prévu, y compris les console.log() attendues de console.log() dans background.js (voir les extraits de code source correspondants ci-dessous) … sauf que la fenêtre ne tourne pas en plein écran; rien ne se passe réellement, pas d’avertissement sur la console pour exiger un événement initié par l’utilisateur non plus, ce que je recevrais si j’avais essayé quelque chose de similaire depuis la page web (c’est pourquoi j’ai commencé par créer cette extension). Essayer w.state = 'minimized' , par exemple, ne fait rien non plus.

Des questions:

  1. L’API Firefox WebExtensions est-elle censée prendre en charge les modifications de window.state (déjà)?

  2. Si oui, l’API de Firefox WebExtensions est-elle censée être suffisamment privilégiée pour déclencher le plein écran sans interaction explicite de l’utilisateur?

  3. Si oui, devrais-je être autorisé à le faire dans le contexte que j’essaie de le faire?

  4. Est-ce que Ubuntu ou n’importe quelle préférence de Firefox pourrait être le coupable, peut-être?


Données manifest.json pertinentes:

 "background": { "scripts": ["background.js"] }, "content_scripts": [ { "matches": ["*://privilegeduri/*"], "js": ["jquery-1.11.3.min.js", "content.js"], "run_at": "document_start" } ], // I've sortinged without "fullscreen" as well "permissions": [ "tabs", "fullscreen", // no mention of this on MDN, but I sortinged it anyway "webNavigation" ] 

Le script de page Web privilégié:

 if( location.hash == '#fullscreen' ) { if( hasExtension() ) { // function that evaluates whether my extension is installed window.postMessage( { action: 'requestFullscreen' }, 'http://privilegeduri' ); } } 

Le script content.js :

 function receiveMessage( e ) { if( e.source === window && e.origin === 'http://privilegeduri' ) { switch( e.data.action ) { case 'requestFullscreen': chrome.runtime.sendMessage( e.data ); break; } } } window.addEventListener( 'message', receiveMessage ); 

Le script background.js :

 function receiveMessage( message, sender, sendResponse ) { if( sender.id === chrome.runtime.id && sender.url.match( /^http:\/\/privilegeduri/ ) ) { switch( message.action ) { case 'requestFullscreen': browser.windows.get( sender.tab.windowId, {}, function( w ) { console.log( w.state ); // outputs 'normal' w.state = 'fullscreen'; console.log( w.state ); // outputs the expected value 'fullscreen' } ); break; } } } chrome.runtime.onMessage.addListener( receiveMessage ); 

Argh … Je suis juste tombé sur la méthode windows.update() et quand j’ai essayé de définir l’ state via l’object de paramètre updateInfo , il a donné une notification:

Erreur de type pour le paramètre updateInfo (la propriété “state” n’est pas prise en charge par Firefox) pour windows.update

Quel dommage.

c’est 2018 ici et la base de code a changé. Si vous travaillez avec Firefox Quantum, windows.update () fonctionne désormais comme prévu. Voici un exemple rapide:

manifest.json:

 { "manifest_version": 2, "name": "WootFullscreen", "version": "9000.0.0.1", "description": "Sends woot, gets fullscreen.", "author": "Mekronid", "content_scripts": [ { "matches": [""], "js": ["messagesender.js"] } ], "background": { "scripts": ["messagereciever.js"] }, "permissions": ["tabs", ""] } 

messagesender.js:

 browser.runtime.sendMessage({message: "woot"}) 

messagereciever.js:

 browser.runtime.onMessage.addListener(listener) async function listener(findWoot) { console.log(findWoot.message) var val = await browser.windows.getCurrent() browser.windows.update(val.id, { state: "fullscreen"}) }