Работа с Xubuntu 14.04 и Firefox 45.0.1 здесь
Я пытаюсь автоматически перевести окно браузера в полноэкранное состояние из фонового скрипта, если location.hash == "#fullscreen"
.
Это запрашивается из сценария привилегированной веб-страницы путем выполнения postMessage()
, который прослушивает сценарий содержимого, который, в свою очередь, делегирует этот запрос фоновому сценарию.
Все работает, как и ожидалось, включая ожидаемые значения console.log()
в background.js
(см. соответствующие фрагменты исходного кода ниже)... за исключением того, что окно не становится полноэкранным; на самом деле ничего не происходит, также нет предупреждения консоли о необходимости инициированного пользователем события, которое я получил бы, если бы попробовал что-то подобное с самой веб-страницы (именно поэтому я обратился к созданию этого расширения в первом место). Например, попытка w.state = 'minimized'
тоже ничего не дает.
Вопросы:
Предполагается ли, что Firefox WebExtensions API поддерживает
window.state
изменений (уже)?Если да, то должен ли Firefox WebExtensions API иметь достаточно привилегий, чтобы запускать полноэкранный режим без явного взаимодействия с пользователем?
Если да, следует ли мне разрешить делать это из контекста, в котором я пытаюсь это сделать?
Может быть, виноват (X) ubuntu или любое другое предпочтение Firefox?
Соответствующие manifest.json
данные:
"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"
]
Сценарий привилегированной веб-страницы:
if( location.hash == '#fullscreen' ) {
if( hasExtension() ) { // function that evaluates whether my extension is installed
window.postMessage( {
action: 'requestFullscreen'
}, 'http://privilegeduri' );
}
}
Скрипт 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 );
Скрипт 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 );
about:config
предпочтениеfull-screen-api.allow-trusted-requests-only
, которое также может повысить привилегии полноэкранного API, но это будет означать, что я открою пользователям моего дополнения доступ к любому веб-сайту, имеющему эту привилегию, и я не не хочу делать это с моими пользователями, конечно. :-) Я хочу, чтобы эта привилегия была только у моего собственного веб-сайта. - person Decent Dabbler   schedule 22.04.2016getMostRecentWindow().fullScreen = true;
- person Noitidart   schedule 22.04.2016