Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展程序在获取仅加载特定页面的ContextMenu时遇到问题_Javascript_Google Chrome_Google Chrome Extension_Contextmenu - Fatal编程技术网

Javascript Chrome扩展程序在获取仅加载特定页面的ContextMenu时遇到问题

Javascript Chrome扩展程序在获取仅加载特定页面的ContextMenu时遇到问题,javascript,google-chrome,google-chrome-extension,contextmenu,Javascript,Google Chrome,Google Chrome Extension,Contextmenu,我从谷歌的contextMenu示例开始。它使用适用于所有页面的背景页面创建上下文菜单 我正在寻找一种方法来创建上下文菜单的唯一专门为一个页面。我试图针对的示例页面是任何Reddit页面 Mymanifest.json: { "name": "Context Menus Sample", "description": "Shows some of the features of the Context Menus API", "version": "0.6", "permissi

我从谷歌的
contextMenu
示例开始。它使用适用于所有页面的背景页面创建上下文菜单

我正在寻找一种方法来创建上下文菜单的唯一专门为一个页面。我试图针对的示例页面是任何Reddit页面

My
manifest.json

{
  "name": "Context Menus Sample",
  "description": "Shows some of the features of the Context Menus API",
  "version": "0.6",
  "permissions": ["contextMenus"],

  "manifest_version": 2,
  "content_scripts": [
    {
      "matches": ["http://www.reddit.com/*"],
      "js": ["sample.js"]
    }
  ]
}
sample.js
与Google Examples提供的相同。它最初是一个背景页面脚本,我已经将其移动到内容脚本部分,以便它只为指定的(Reddit)URL加载

sample.js中的示例代码:

var checkbox1 = chrome.contextMenus.create(
  {"title": "Checkbox1", "type": "checkbox", "onclick": checkboxOnClick}
);
因此,我的困惑在于,当你在reddit.com上时,为什么contextmenu没有出现。我的印象是,当url匹配时,sample.js会触发。

。运行
sample.js
,但API调用失败

相反,您应该将其移回后台脚本,并在上面阅读文档

具体来说,您可以通过
documentUrlPatterns
参数来限制上下文菜单的显示位置:

var checkbox1 = chrome.contextMenus.create({
    "title": "Checkbox1",
    "type": "checkbox",
    "onclick": checkboxOnClick,
    "documentUrlPatterns": ["*://*.reddit.com/*"]
});

更新

我回到了原始的
manifest.json
,它只包含上下文菜单:

{
  "name": "Context Menus Sample",
  "description": "Shows some of the features of the Context Menus API",
  "version": "0.6",
  "permissions": ["contextMenus"],
  "background": {
    "scripts": ["sample.js"]
  },
  "manifest_version": 2
}
我接着更改了创建第一个菜单项的
sample.js
行(请注意,这是一次学习经历):

发件人:

结论

以上更改现在使第一个菜单项仅在您位于reddit页面内时才可访问。因此,从这一点开始,我不难理解扩展的其余部分。谢谢你们的帮助


我为我糟糕的格式向编辑道歉。我不熟悉这个网站,也不熟悉扩展,不幸的是,我的睡眠时间超过了正常睡眠时间。我将尽量不让您再陷入这种愚蠢的境地。

扩展与其内容脚本之间的通信是通过消息传递实现的。您应该通过这种方式触发内容脚本注入。跟进此链接:@Nick SO最好采用问答形式;你的问题答案不一致。您可以回答自己的问题,即使您接受不同的答案-因此请将您的更新从问题本身编辑为答案。谢谢。完成了,很抱歉这更有意义。我们不是编辑,我们只是长期用户。考虑到你是新来的,这绝对没问题。只要你接受建设性的批评,你就会成为社区中的一员。
for (var i = 0; i < contexts.length; i++) {
  var context = contexts[i];
  var title = "Test '" + context + "' menu item";
  var id = chrome.contextMenus.create({"title": title, "contexts":[context],"onclick": genericOnClick});
  console.log("'" + context + "' item:" + id);
}
for (var i = 0; i < contexts.length; i++) {
  var context = contexts[i];
  var title = "Test '" + context + "' menu item";
  var id = chrome.contextMenus.create({
    "title": title,
    "contexts": [context],
    "onclick": genericOnClick,
    "documentUrlPatterns": ["*://*.reddit.com/*"]
  });
  console.log("'" + context + "' item:" + id);
}