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"
],