Chrome.tabs.executeScript - 未定义标签

时间:2016-06-08 06:16:21

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

我正在尝试编写一个带有一个名为' btn3'的按钮的chrome扩展程序。当我点击chrome扩展程序(popup.html)中的该按钮时,它会点击网页上的按钮。网页上的按钮具有以下ID:"常规 - 辅助按钮发送消息"

2个问题:

  1. 我收到&#34的错误;标签未定义"适用于以下代码中的chrome.tabs.executeScript。我该如何解决这个问题?
  2. 我是否在content_scripts.js中写错了什么?
  3. 谢谢!

    Chrome扩展程序窗口中按钮的脚本

    document.addEventListener('DOMContentLoaded', function (){
        document.getElementById('btn3').addEventListener('click', sendInMail)
    });
    
    sendInMail = function(){
    
    
        chrome.tabs.executeScript(tabs[0], {file: "content_script.js"});
    
    }
    

    content_scripts.js

    alert("content_script is working!");
    
    function clickSendInMailButton() {
        var SendInMailButton = document.getElementsByClassName("regular-secondary-button send-message"),
    
        SendInMailButton.click();
    }
    
    clickSendInMailButton();
    

    的manifest.json

    {
      "manifest_version": 2,
    
      "name": "LinkedIn Assistant",
      "description": "This extension makes a LSS AE successful.",
      "version": "1.0",
    
      "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
      },
    
      "content_scripts": [
        {
          "matches": ["http://*/*", "https://*/*"],
          "js": ["content_script.js"]
        }
      ],
       "chrome_url_overrides" : {
        "newtab": "newtab.html"
      },
    
        "background": {
        "scripts": ["bg.js"]
      },
    
      "permissions": [
        "tabs", "<all_urls>"
      ]
    
    
    }
    

3 个答案:

答案 0 :(得分:7)

  

&#34;标签的错误未定义&#34;

tabs [0] - 你需要找到它。您的脚本在popup.html的上下文中执行。我希望popup.html包含

<head>
...
    <script src="popup.js"></script>
</head>

  

Chrome扩展程序窗口中按钮的脚本

来自popup.js。而且你永远不会尝试在popup.html中运行代码。

因此,在这种情况下,没有人知道tabs[0]。您需要询问chrome哪个窗口以及哪个选项卡现在处于活动状态。它可以像ShwetaM写的那样,或者像from samples

一样
chrome.windows.getCurrent(function (currentWindow) {
    chrome.tabs.query({ active: true, windowId: currentWindow.id }, function (activeTabs) {
        activeTabs.map(function (tab) {
            chrome.tabs.executeScript(tab.id, { file: 'content_script.js', allFrames: false });
        });
    });
});

或者您可以在没有tab.id,

的情况下尝试
chrome.tabs.executeScript({ file: 'content_script.js', allFrames: false });

因为在这种情况下脚本将在the active tab of the current window

中运行

在Manifest.json中指定时,在创建选项卡every refresh时将执行"content_scripts":脚本。我不确定,但可能在加载DOM之前。但是,您不应在Manifest.json中指定"content_scripts":,因为this content script's code will be always injected

此外,您必须确保活动选项卡包含您要查找的按钮。对某些对象使用console.dir,尤其是函数中的参数;某些文字console.log; debugger用于快乐调试。

答案 1 :(得分:3)

你可以删除参数&#34; tabs [0]&#34;

  

整数(可选)tabId
  要运行脚本的选项卡的ID;默认为当前窗口的活动选项卡。

https://developer.chrome.com/extensions/tabs#method-executeScript

答案 2 :(得分:0)

试试这个:

sendInMail = function(){
  chrome.tabs.query({
                active: true,
                currentWindow: true
            }, function(tabs) {
    chrome.tabs.executeScript(tabs[0], {file: "content_script.js"});

  });

}