Javascript Can';除非首先加载弹出页面/脚本,否则无法从后台脚本成功运行executeScript

Javascript Can';除非首先加载弹出页面/脚本,否则无法从后台脚本成功运行executeScript,javascript,firefox-addon,firefox-addon-webextensions,Javascript,Firefox Addon,Firefox Addon Webextensions,我正在尝试使用键盘快捷键从后台脚本运行执行脚本,但它不起作用并返回: Error: No window matching {"matchesHost":[]} 但是如果我只是打开弹出页面,关闭它,然后做同样的事情,一切都正常 我在使用Beastify示例时重新创建了这个问题,只做了很少的更改。代码如下: manifest.json { ... (not interesting part, same as in beastify) "permissions": [ "a

我正在尝试使用键盘快捷键从后台脚本运行执行脚本,但它不起作用并返回:

Error: No window matching {"matchesHost":[]}
但是如果我只是打开弹出页面,关闭它,然后做同样的事情,一切都正常

我在使用Beastify示例时重新创建了这个问题,只做了很少的更改。代码如下:

manifest.json

{
    ... (not interesting part, same as in beastify)

    "permissions": [
    "activeTab"
    ],  

    "browser_action": {
        "default_icon": "icons/beasts-32.png",
        "default_title": "Beastify",
        "default_popup": "popup/choose_beast.html"
    },

    "web_accessible_resources": [
        "beasts/frog.jpg",
        "beasts/turtle.jpg",
        "beasts/snake.jpg"
    ],

My additions start here:

    "background": {
        "scripts": ["background_scripts/background_script.js"]
    },

    "commands": {
        "run_content_test": {
            "suggested_key": {
                "default": "Alt+Shift+W"
            }
        }
    }
}
弹出/选择_beast.js(与原文相同)

background\u scripts/background\u script.js(由我添加)

内容脚本/content\u test.js(由我添加)

我跳过了整个内容\u脚本/beastify.js,因为它与此无关(IMO),但可以找到它

现在,我知道后台脚本运行并接收消息,即使弹出页面以前没有打开过,因为我看到它无法执行脚本。我不知道是什么导致了这种行为,也不知道是否有办法解决它

注意:我尝试添加权限,例如“选项卡”甚至“所有URL”,但没有改变任何内容

注意2:我正在从“关于:调试”页面以临时加载项的形式运行该加载项,但我正在尝试在正常的非限制页面上执行脚本(例如,在此页面上,我可以重新创建问题)

谢谢大家

// in manifest.json

    "permissions": [
       "<all_urls>",
       "activeTab"
    ],
因此,添加
似乎可以解决这个问题。但是,您说您在权限中包含“所有URL”时仍遇到此问题,因此我不确定我这样做是否可以在您自己的设置中修复此问题

编辑:我想,就可能带来的安全风险而言,给予任何webextension如此广泛的权限是否明智是一个单独的重要考虑因素

(我本来会将此作为评论发布,但我的声誉还不足以添加评论。)

因此,添加
似乎可以解决这个问题。但是,您说您在权限中包含“所有URL”时仍遇到此问题,因此我不确定我这样做是否可以在您自己的设置中修复此问题

编辑:我想,就可能带来的安全风险而言,给予任何webextension如此广泛的权限是否明智是一个单独的重要考虑因素


(我本来会将此作为评论发布,但我的声誉还不够好,无法添加评论。)

请描述确切的用户交互,我假设,从
开始,将扩展作为临时加载项加载到
关于:调试
。我试图确定您所做的任何事情导致打开弹出窗口以解决错误的原因。您得到的错误是,
error:在某些情况下(当您尝试插入到包含您无权插入的URL的选项卡中时),不应出现与{“MatcheHost”:[]}
匹配的窗口。在处理承诺的过程中,你应该优雅地处理这件事。嗨,谢谢你的回复!您是对的,我正在从“about:debugging”将其作为临时加载项加载。这并不告诉我当当前窗口中活动选项卡的URL为“about:debugging”时,您是否正在尝试执行它。它也没有暗示解释为什么弹出打开/关闭“修复”错误。您不允许将脚本插入大多数
关于:
页面,包括
关于:调试
(和)。尝试使用
tabs.executeScript()
将脚本注入此类页面将导致出现错误。有解决方法,但我仍在试图找出为什么打开和关闭弹出窗口会停止错误。嘿,对不起,错误信息。我不是在说关于:调试页面。我知道,在大多数情况下,我无法注入到这些页面中,我所说的是一个普通页面(例如stackoverflow页面)。请描述您所做的确切用户交互,我假设,从
关于:调试开始,将扩展加载为临时附加组件。我试图确定您所做的任何事情导致打开弹出窗口以解决错误的原因。您得到的错误是,
error:在某些情况下(当您尝试插入到包含您无权插入的URL的选项卡中时),不应出现与{“MatcheHost”:[]}
匹配的窗口。在处理承诺的过程中,你应该优雅地处理这件事。嗨,谢谢你的回复!您是对的,我正在从“about:debugging”将其作为临时加载项加载。这并不告诉我当当前窗口中活动选项卡的URL为“about:debugging”时,您是否正在尝试执行它。它也没有暗示解释为什么弹出打开/关闭“修复”错误。您不允许将脚本插入大多数
关于:
页面,包括
关于:调试
(和)。尝试使用
tabs.executeScript()
将脚本注入此类页面将导致出现错误。有解决方法,但我仍在试图找出为什么打开和关闭弹出窗口会停止错误。嘿,对不起,错误信息。我不是在说关于:调试页面。我知道,在大多数情况下我无法注入这些内容,我说的是一个普通页面(例如stackoverflow页面)。嘿,谢谢你的回复,感谢上帝你检查过了,因为显然(甚至不能编辑我自己的评论)。。。我使用的是“所有URL”,而不是“”。另一方面,有没有一种方法可以在不使用executeScript的情况下从后台脚本创建警报?给我的插件这个特权感觉很奇怪。@sunlesvoid,Re:alert:不容易。您可以创建像这样的警报,但它需要大量的代码。@Makyen,我明白了,谢谢您的回复,我猜“”将必须是d
browser.commands.onCommand.addListener(function(command) {
    var executing = browser.tabs.executeScript(
            null, 
            {file: "/content_scripts/content_test.js"});

    executing.then(
            function (res){
                console.log("started content_test.js: " + res);
            }, 
            function (err){
                console.log("haven't started, error: " + err);
            });
});
alert("0");
// in manifest.json

    "permissions": [
       "<all_urls>",
       "activeTab"
    ],
    "permissions": [
       "activeTab"
    ],