在加载DOM之前,我在运行内容脚本时遇到了困难。标签中有一个AJAX请求在$(document).ready()上触发,当请求完成时,我运行我的扩展代码。
我正在通过background.js上的webRequest API观察该请求,如下所示:
chrome.webRequest.onCompleted.addListener(
function(details) {
if(details.url.indexOf("ajax.php") != -1) {
// sending message to tab where the AJAX request fired from
chrome.tabs.sendMessage(details.tabId, message);
}
},
{urls: ["*://derp.com/*""]}
);
然后我正在等待在内容脚本上收到消息。
chrome.extension.onMessage.addListener(function(msg, sender, sendResponse) {
if(msg.action == "onInventoryLoaded") {
epicStuff();
}
});
但是大部分时间都没有收到内容脚本上的消息,因为它还没有运行,即使我已经指示Chrome在document_start上运行内容脚本。
{
"matches": [
"http://derp.com/*"
],
"js": [
"src/inject/inject.js"
],
"run-at": "document_start"
}
让我感到困扰的是Tampermonkey扩展程序如何能够比Chrome扩展程序更早地运行用户脚本(通过记录时间戳计算出来)。
我还向其他人发送了扩展程序,尝试在AJAX请求之前运行内容脚本。所以我不知道发生了什么。
答案 0 :(得分:0)
正如@kalman所指出的,我在manifest.json文件中有错误的属性,它应该是run_at而不是run-at。很糟糕,Chrome没有指出错误/无效的属性名称。