Ubuntu 是window.state=';全屏';从一个背景脚本应该工作?
在这里使用Xubuntu 14.04和Firefox 45.0.1 如果Ubuntu 是window.state=';全屏';从一个背景脚本应该工作?,ubuntu,firefox-addon,fullscreen,firefox-addon-webextensions,Ubuntu,Firefox Addon,Fullscreen,Firefox Addon Webextensions,在这里使用Xubuntu 14.04和Firefox 45.0.1 如果location.hash==“#fullscreen”,我试图在后台脚本中自动将浏览器窗口置于全屏状态 这是通过执行内容脚本侦听的postMessage()从特权网页的脚本请求的,这反过来又将此请求委托给后台脚本 一切都按预期工作,包括background.js中预期的console.log()值(请参阅下面的相关源代码片段)。。。除此之外,窗口不会全屏显示;实际上什么都没有发生,也没有关于需要用户启动事件的控制台警告,如
location.hash==“#fullscreen”
,我试图在后台脚本中自动将浏览器窗口置于全屏状态
这是通过执行内容脚本侦听的postMessage()
从特权网页的脚本请求的,这反过来又将此请求委托给后台脚本
一切都按预期工作,包括background.js
中预期的console.log()
值(请参阅下面的相关源代码片段)。。。除此之外,窗口不会全屏显示;实际上什么都没有发生,也没有关于需要用户启动事件的控制台警告,如果我从网页本身尝试类似的东西,我会收到这些警告(这就是为什么我首先要创建这个扩展)。例如,尝试w.state='minimized'
,也没有任何效果
问题:
window.state
更改(已经)相关
manifest.json
数据:
“背景”:{
“脚本”:[“background.js”]
},
“内容脚本”:[
{
“匹配项”:[“*://privilegeduri/*”],
“js”:[“jquery-1.11.3.min.js”,“content.js”],
“运行时间”:“文档开始”
}
],
//我也试过不用“全屏”
“权限”:[
“标签”,
“全屏”//在MDN上没有提到这一点,但我还是尝试过
“网络导航”
]
特权网页脚本:
if(location.hash='#全屏){
if(hasExtension()){//函数,用于计算是否安装了我的扩展
window.postMessage({
操作:“请求全屏”
}, 'http://privilegeduri' );
}
}
content.js
脚本:
函数接收消息(e){
如果(e.source==窗口和e.origin=='http://privilegeduri' ) {
开关(如数据、动作){
案例“请求全屏”:
chrome.runtime.sendMessage(例如数据);
打破
}
}
}
window.addEventListener('message',receiveMessage);
background.js
脚本:
函数接收消息(消息、发送方、发送响应){
if(sender.id==chrome.runtime.id&&sender.url.match(/^http:\/\/privilegeduri/){
开关(message.action){
案例“请求全屏”:
get(sender.tab.windowId,{},函数(w){
console.log(w.state);//输出“正常”
w、 状态='全屏';
console.log(w.state);//输出预期值“fullscreen”
} );
打破
}
}
}
chrome.runtime.onMessage.addListener(receiveMessage);
Argh。。。我刚刚遇到了这个方法,当我试图通过updateInfo
参数对象设置状态时,它确实给出了一个通知:
windows.update的参数updateInfo(Firefox不支持属性“state”)的类型错误
这真是微不足道。现在是2018年,代码库发生了变化。如果您使用的是Firefox Quantum,那么现在就可以正常工作了。下面是一个简单的例子:
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>"]
}
messagereceiver.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"})
}
你尝试过html5全屏api吗?@Noitidart是的,最终我已经让它与全屏api一起工作了。然而,只有在一个无重启(引导)的插件中,我开始开发这个扩展的原因是,全屏API仅限于用户在网页中启动。然而,不幸的是,WebExtensions API在这方面也没有提升的特权:(因此,在我的OP示例也失败后,我最后的希望是“遗留”的无重启XPCOM API,幸运的是,它确实具有自主全屏激活的提升权限。:-)@Noitidart PS.:有一个关于:config
首选项全屏api。只允许受信任的请求
,这可能会提升全屏api权限,但这意味着我会将我的插件的用户打开到任何具有此权限的网站,当然,我不想对我的用户这样做。:-)我只想我自己的网站有这个特权。谢谢分享!从jpm插件中,您可以执行相同的操作,getMostRecentWindow().fullScreen=true代码>@Noitidart谢谢你的建议!我刚试过,你是对的。然而,这似乎是一种稍有不同的全屏模式(F11)。由于我的网站还允许用户主动进入和退出全屏(使用HTML5API),这与该功能冲突,因为ESC不适用于F11类型的全屏。但无论如何,很高兴知道全屏放映的可能性。
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"})
}