簡體   English   中英

Chrome為什么會忽略擴展程序中的executeScript命令?

[英]Why is Chrome ignoring my executeScript command in my extension?

我試圖弄清楚內容腳本是如何工作的。

我正在編寫一個帶有上下文菜單的擴展程序,單擊該選項后,下次單擊將導致出現一個警告對話框,其中包含有關元素所在頁面以及元素的ID和名稱的信息。

我認為我的問題是在清單上的某個位置包含了內容腳本文件的名稱,因為我使用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);

我認為正在發生的事情是您正在嘗試在elementTracker.js文件的末尾調用另一個事件偵聽器。 您不需要這樣做,因為您正在從上下文菜單調用中初始化腳本。

將該腳本的最后一行更改為click(event) 該腳本將從上下文菜單中注入到頁面中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM