Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.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 在popup.html中单击后执行脚本(chrome扩展名)_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 在popup.html中单击后执行脚本(chrome扩展名)

Javascript 在popup.html中单击后执行脚本(chrome扩展名),javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,当我点击popup.html中的按钮时,我正试图在页面上执行javascript。我试着用这样一种方式: 在background.js中: chrome.tabs.onUpdated.addListener(function(tabId, changeInfo){ if(changeInfo.status == "loading") { insert(tabId); } }); function insert(tabId) { chrome.tabs.ge

当我点击
popup.html
中的按钮时,我正试图在页面上执行javascript。我试着用这样一种方式:

background.js中

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo){
    if(changeInfo.status == "loading") {
        insert(tabId);
    }
});
function insert(tabId) {
    chrome.tabs.get(tabId, function(tab) {
        $('button').click(function() {
            chrome.tabs.executeScript(tab.id, {file: 'js/alert.js'});
        });
    });
}
Alert.js只包含一个字符串:
Alert('works')


警报只是一个例子。真正的脚本应该在用户单击im popup.html按钮后使用打开的选项卡执行一些DOM操作。

我为您的需要编写了一个演示


alert.js

alert('hello ' + document.location.href);
background.js

// empty file, but needed
icon.png

manifest.json

{
  "manifest_version": 2,

  "name": "Click to execute",
  "description": "Execute script after click in popup.html (chrome extension) http://stackoverflow.com/questions/20764517/execute-script-after-click-in-popup-html-chrome-extension.",
  "version": "1.0",

  "icons": {
    "48": "icon.png"
  },

  "permissions": [
    "tabs", "<all_urls>"
  ],

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

  "background": {
    "scripts": ["background.js"],
    "persistent": false
  }
}

您还可以使用消息传递:

在popup.js中

document.getElementById("clicked-btn").addEventListener("click", function(e) {
    chrome.runtime.sendMessage({'myPopupIsOpen': true});
});
chrome.runtime.onMessage.addListener(function(message, sender) {
      if(!message.myPopupIsOpen) return;

      // Do your stuff
});
在background.js中

document.getElementById("clicked-btn").addEventListener("click", function(e) {
    chrome.runtime.sendMessage({'myPopupIsOpen': true});
});
chrome.runtime.onMessage.addListener(function(message, sender) {
      if(!message.myPopupIsOpen) return;

      // Do your stuff
});

未测试,但应能正常工作。有关的进一步信息。

您似乎弄乱了一些概念(如弹出窗口、背景页等)。发布您的清单也会有所帮助。提供的
background.js
不符合您的要求,似乎没有用。在内容脚本中,将警报放入函数中,例如“handleButtonClick”。确保内容脚本已在清单中注册。然后在popup.html中调用函数:
chrome.tabs.executeScript({code:'handleButtonClick()')
。我对你的努力投了赞成票,但是你为什么添加了空的background.js?请原谅,background.js不是必需的。@Vladglubev没有这样的api,但是你可以使用纯javascript
document.createElement('tag_name')插入html或jQuery。这很容易。虽然这在理论上可以回答这个问题,但在这里包含答案的基本部分,并提供链接供参考。将要点的内容复制到这个答案中是很简单的。但是,您没有在gist中说明代码的许可条款。因此,不清楚是否允许我这样做。这个脚本将在哪里执行?在popup.html上?或者是活动网页(比如contentscript)?这是一种更好的方法,而不是像@greatghoul的回答那样运行原始脚本。理论上,这可能更好,但不起作用。