![](/img/trans.png)
[英]Unexpected results running chrome.tabs.executeScript() in my Chrome Extension?
[英]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.