为什么Chrome在我的扩展程序中忽略了我的executeScript命令?

时间:2014-01-27 19:29:48

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

我正在试图找出内容脚本的确切工作方式。

我正在编写一个带有上下文菜单的扩展程序,单击该选项后,下一次单击将生成一个警告对话框,其中包含有关该元素所在页面的信息以及单击该元素的ID和名称。 / p>

我认为我的问题是在我的清单上某处包含内容脚本文件的名称,因为我使用executeScript来使用它而不是在每个网页上注入它但我无法弄清楚在哪里把它。

如果我能提供更多有用的信息,请告诉我。

以下是我的清单副本,我使用的主要脚本以及我要插入的脚本。

的manifest.json

    {
      "name": "Omnixx Page Object Builder",
      "description": "Finds information about an element clicked, started with a context menu",
      "version": "0.3",
      "permissions": ["tabs", "contextMenus", "activeTab"],
      "background": {
        "persistent": false,
        "scripts": ["menuBuilder.js"]
      },
      "manifest_version": 2
    }

menuBuilder.js

function onClickHandler(info, tab) {
  if (info.menuItemId == "start") {
    console.log("Started trying to find elements");
    chrome.tabs.executeScript(null, {file:"elementTracker.js"});
    console.log("Started listening...");
  } 
};

chrome.contextMenus.onClicked.addListener(onClickHandler);

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({"title": "Find element information", "id": "start", "contexts":["all", "page", "frame", "selection", "link", "editable", "image","video", "audio"], });
});

elementTracker.js

function click(event) {
    // Begin building the message
            var msgToWrite = "";

            var curscreen = window.HIDEFRAME.document.getElementsByName("curscreen")[1].value;
            msgToWrite += "curscreen: '" + curscreen + "'\n";

            var url = content.document.URL;
            msgToWrite += "URL: " + url + "\n";

            // A try-catch block is necessary for finding the frame; otherwise the code
            // will fail for pages without frames
            try {
                var frame = event.originalTarget.ownerDocument.defaultView.frameElement;
                var frameName = frame.getAttribute("name");

                if (frameName != null) {
                msgToWrite += "Frame: '" + frameName + "'\n";
                } else {
                    msgToWrite += "No frame found\n";
                }
            } catch (e) {
                msgToWrite += "No frame found\n";
            }

            // Get the element's ID
            var elemID = event.target.getAttribute("id");

            if (elemID != null) {
                msgToWrite += "ID: '" + elemID + "'\n";
            } else {
                msgToWrite += "No ID found\n";
            }

            // Get the element's name
            var elemName = event.target.getAttribute("name");

            if (elemName != null) {
                msgToWrite += "Name: '" + elemName + "'";
            } else {
                msgToWrite += "No name found";
            }

            // Create a pop-up message
            alert(msgToWrite);
}

document.addEventListener('click', click);

1 个答案:

答案 0 :(得分:0)

我认为您正在尝试在elementTracker.js文件末尾调用另一个事件侦听器。您不需要它,因为您正在从上下文菜单调用初始化脚本。

将该脚本中的最后一行更改为click(event)。该脚本将从上下文菜单中注入页面。