在这里使用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 );
答案 0 :(得分:1)
唉...我刚刚遇到了windows.update()
方法,当我尝试通过state
参数对象设置updateInfo
时,做了给出了注意:
对于windows.update参数updateInfo(Firefox不支持属性“state”)的类型错误
那太可怜了。
答案 1 :(得分:1)
这是2018年,代码库发生了变化。如果您正在使用Firefox Quantum,那么windows.update()现在可以按预期运行。这是一个简单的例子:
的manifest.json:
{
"manifest_version": 2,
"name": "WootFullscreen",
"version": "9000.0.0.1",
"description": "Sends woot, gets fullscreen.",
"author": "Mekronid",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["messagesender.js"]
}
],
"background": {
"scripts": ["messagereciever.js"]
},
"permissions": ["tabs", "<all_urls>"]
}
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"})
}