在此处使用 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 );