2016-04-18 6 views
2

mit Xubuntu Arbeiten 14.04 und Firefox 45.0.1 hierWird window.state = 'fullscreen' von einem Hintergrundskript funktionieren?

Ich versuche automatisch Fenster eines Browser in einen Vollbild-Zustand zu versetzen, aus einem Hintergrundskript, wenn location.hash == "#fullscreen".

Dies wird vom Skript einer privilegierten Webseite angefordert, indem eine postMessage() ausgeführt wird, auf die ein Inhaltsskript wartet, die wiederum diese Anforderung an das Hintergrundskript delegiert.

Alles funktioniert wie erwartet, einschließlich der erwarteten console.log() Werte in background.js (siehe die entsprechenden Quellcode-Schnipsel unten) ... außer, das Fenster wird nicht Vollbildmodus; nichts passiert tatsächlich, keine Konsole warnt davor, ein benutzerinitiiertes Ereignis zu verlangen, das ich würde erhalten hätte, habe ich etwas ähnliches von der Webseite selbst versucht (weshalb ich mich an die Erstellung dieser Erweiterung wandte, an erster Stelle). Das Versuchen w.state = 'minimized', zum Beispiel, tut auch nichts.

Fragen:

  1. Ist der Firefox WebExtensions API window.state Änderungen (bereits) unterstützen soll?

  2. Wenn ja, soll die Firefox WebExtensions API privilegiert genug sein, um Vollbild ohne explizite Benutzerinteraktion zu initiieren?

  3. Wenn ja, sollte ich dies aus dem Kontext tun können, versuche ich dies zu tun?

  4. Könnte (X) ubuntu oder irgendeine Firefox-Präferenz der Übeltäter sein, vielleicht?


Relevante manifest.json Daten:

"background": { 
    "scripts": ["background.js"] 
}, 

"content_scripts": [ 
    { 
    "matches": ["*://privilegeduri/*"], 
    "js": ["jquery-1.11.3.min.js", "content.js"], 
    "run_at": "document_start" 
    } 
], 

// I've tried without "fullscreen" as well 
"permissions": [ 
    "tabs", 
    "fullscreen", // no mention of this on MDN, but I tried it anyway 
    "webNavigation" 
] 

Die privilegierte Webseite Skript:

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

Das content.js Skript:

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); 

Das background.js Skript:

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); 
+0

Haben Sie versucht, die html5 Vollbild api - https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API -? – Noitidart

+1

@Noitidart Ja, letztendlich habe ich es mit der Vollbild-API arbeiten lassen. Jedoch nur innerhalb eines neustartlosen (bootstrapped) Addons. Der Grund, warum ich anfing, diese Erweiterung zu entwickeln, war, weil die Vollbild-API auf die Benutzerinitiierung innerhalb von Webseiten beschränkt ist. Allerdings hat die WebExtensions-API auch in dieser Hinsicht leider keine erhöhten Rechte. :(Und so, nachdem ich auch mit meinem OP-Beispiel gescheitert bin, wurden meine letzten Hoffnungen auf die "legacy" restartless XPCOM-API gesetzt, die glücklicherweise * die erhöhten Privilegien für autonome Vollbild-Aktivierung hat :-) –

+1

@Noitidart PS. : Es gibt eine 'about: config' Einstellung 'full-screen-api.allow-trusted-requests-only', welche die API-Rechte der Vollbild-API ebenfalls erhöhen könnte, aber das würde bedeuten, dass ich die Benutzer meines Addons bis zu * öffnen würde jede * Webseite mit diesem Privileg und ich möchte das natürlich nicht für meine Benutzer tun. :-) Ich möchte nur, dass meine eigene Website dieses Privileg hat. –

Antwort

1

Argh ... Ich kam gerade über die windows.update() Methode und wenn ich die state durch den updateInfo Parameter-Objekt zu setzen versuchte, es hat einen Hinweis geben:

Typfehler für Parameter updateInfo (Eigenschaft "state" wird von Firefox nicht unterstützt) für windows.update

Das ist schade.