0

我究竟做错了什么?单击“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"});
});

重置.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"
  ]
}
4

1 回答 1

1

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

  • 用户点击browserAction
  • 弹出窗口已创建并popup.html加载脚本
  • popup.js加载并注册一个监听器chrome.browserAction.onClicked.addListener
  • 用户关闭弹出窗口(通过单击窗口外部的任意位置或browserAction再次单击)
  • pupup.html页面已卸载
  • chrome.browserAction.onClicked.addListener监听器未注册

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

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

如果您想将脚本注入到popup.html- 这没有多大意义。你有完全的控制权popup.html,你可以简单地reset.js<head>.

于 2012-10-29T08:46:15.950 回答