在从标记触发的AJAX请求之后执行Chrome内容脚本

时间:2014-09-16 10:46:33

标签: javascript jquery ajax html5 google-chrome-extension

在加载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请求之前运行内容脚本。所以我不知道发生了什么。

1 个答案:

答案 0 :(得分:0)

正如@kalman所指出的,我在manifest.json文件中有错误的属性,它应该是run_at而不是run-at。很糟糕,Chrome没有指出错误/无效的属性名称。