Chrome应用程序在点击时运行javascript

时间:2012-10-29 07:39:11

标签: javascript google-chrome google-chrome-extension

我做错了什么?我想在点击“Show me some foo”时运行一个函数。

manifest.json browser_action

"browser_action": {
"default_icon": "img/icon.png",
"default_popup": "popup.html"
  },

popup.html

<!DOCTYPE html>
<html>
  <head>
  <meta charset="UTF-8">
    <script type="text/javascript" src="js/popup.js"></script>
  </head>
  <body>
 <div class="changes">

<span class="reset"><a href="#" title="Get some foo!" id="foo">Show me some foo</a>
</span>
</div>
  </body>
</html>

popup.js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null,
                       {file:"reset.js"});
});

reset.js

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

完整的manifest.json文件

{
  "name": "App name",
  "version": "1.0.2",
  "manifest_version": 2,
  "description": "Desc.",
  "permissions": [
    "tabs"
  ],
  "browser_action": {
    "default_icon": "img/icon.png"
  },
  "background": {
    "page": "background.html"
  },
  "browser_action": {
    "default_icon": "img/icon.png",
    "default_popup": "popup.html"
  },
    "content_scripts": [
    {
      "matches": [
    "http://*/*",
    "https://*/*"
],
  "js": ["js/myscript.js"],
  "exclude_matches":[
    "http://site.com/*"
]
}
  ],
  "web_accessible_resources": [
"chrome_ex_oauth.html"
  ]
}

1 个答案:

答案 0 :(得分:1)

我不确定你要做什么,但我会向你解释你的代码:

  • 用户点击browserAction
  • 弹出窗口已装箱,并且popup.html的脚本已加载
  • popup.js加载并注册了一个监听器chrome.browserAction.onClicked.addListener
  • 用户关闭弹出窗口(通过点击其外的任何位置或再次点击browserAction
  • pupup.html页面已卸载
  • chrome.browserAction.onClicked.addListener侦听器未注册

正如您所见,reset.js永远不会被加载,因为它永远不会被注入。更重要的是,您不能在同一个扩展程序中使用popup.htmlchrome.browserAction.onClicked.addListener(“如果浏览器操作有弹出窗口,则不会触发此事件。”source)。

您可能希望将chrome.browserAction.onClicked.addListener放入后台页面,以便在点击reset.js时将browserAction注入当前页面。而且,正如我上面提到的,要使chrome.browserAction.onClicked.addListener解雇,你需要从清单中删除"default_popup": "popup.html"

如果你想向popup.html注入一个脚本 - 它没有多大意义。您可以完全控制popup.html,只需将reset.js放入<head>