Ubuntu 是window.state=';全屏';从一个背景脚本应该工作?

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()值(请参阅下面的相关源代码片段)。。。除此之外,窗口不会全屏显示;实际上什么都没有发生,也没有关于需要用户启动事件的控制台警告,如

在这里使用Xubuntu 14.04和Firefox 45.0.1

如果
location.hash==“#fullscreen”
,我试图在后台脚本中自动将浏览器窗口置于全屏状态

这是通过执行内容脚本侦听的
postMessage()
从特权网页的脚本请求的,这反过来又将此请求委托给后台脚本

一切都按预期工作,包括
background.js
中预期的
console.log()
值(请参阅下面的相关源代码片段)。。。除此之外,窗口不会全屏显示;实际上什么都没有发生,也没有关于需要用户启动事件的控制台警告,如果我从网页本身尝试类似的东西,我会收到这些警告(这就是为什么我首先要创建这个扩展)。例如,尝试
w.state='minimized'
,也没有任何效果

问题:

  • Firefox WebExtensions API是否应该支持
    window.state
    更改(已经)

  • 如果是这样的话,FirefoxWebExtensionsAPI是否应该拥有足够的特权,可以在没有显式用户交互的情况下全屏显示

  • 如果是这样的话,我应该被允许在我试图这样做的背景下这样做吗

  • 可能(X)ubuntu或任何Firefox偏好是罪魁祸首吗


  • 相关
    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"})
    }