使用`onclick`和上下文菜单子项?

时间:2014-07-28 18:32:58

标签: javascript google-chrome-extension

我的manifest.json文件中包含此代码:

{
  "name": "Test",
  "description": "test of Context Menus",
  "version": "0.0.1",
  "permissions": [
    "contextMenus"
  ],
  "background": {
    "persistent": false,
    "scripts": ["background.js"]
  },
  "manifest_version": 2
}

这是我的background.js文件:

chrome.runtime.onInstalled.addListener(function() {
  var parent = chrome.contextMenus.create({"title": "TEST", "contexts":["all"], "id": "parent"});  
  var child1 = chrome.contextMenus.create({"title": "Test2", "parentId": "parent", "id": "child1", "onclick": showURL, "contexts": ["all"]});
});

这是我的showURL函数(在background.js文件中)注意:这是文档的最顶层

function showURL() {
alert(document.URL);
}

但是运行它会使child1项消失。这是为什么?

注意:当我删除"onclick": showURL,时,它会显示child1项。

所以,我知道onclick有问题,但我不知道是什么!

请帮帮我,我无法弄清楚代码有什么问题!我认为根据谷歌的API文档,语法是正确的,所以有什么不对?

这应该是一个学习项目 - 学习Chrome Extension API的一个简单部分 - 而且我已经遇到了问题!我知道编程是一个'有问题'的努力但是,加油!有人必须知道解决方案!

2 个答案:

答案 0 :(得分:2)

虽然您已阅读the docs,但您还没有仔细阅读它们:

  

(可选)onclick:

     

单击菜单项时将回调的函数。 活动页面无法使用此功能;相反,他们应该为chrome.contextMenus.onClicked注册一个监听器。

清单中的"persistent": false定义了一个“活动”页面。您应该restructure your code to fit,并使用contextMenus的基于事件的点击处理。

P.S。:请注意,事件页面在概念上比持久性背景页面更难编程。如果这是一次学习体验,您可以尝试从事件页面切换。

答案 1 :(得分:0)

有点远但是......

在定义chrome.runtime.onInstalled.addListener方法后,您是否定义了showURL函数?或者之前?

如果您引用了尚未定义的内容,那么" var child1 = chrome.contextMenus.create"代码未正确完成。

尝试在chrome.runtime.onInstalled.addListener(...)行之前移动showURL定义。

(已经有一段时间了,我生锈了,可能会在这上面咆哮错误的树。)