使用webRequest和sendMessage API获得不可预测的结果

时间:2018-02-06 10:15:35

标签: javascript google-chrome-extension chrome-webrequest

我正在制作一个镀铬扩展程序:

  1. 检测POST请求
  2. 向发出请求的标签中的内容脚本发送消息
  3. 从DOM中检索一些数据并使用sendResponse
  4. 将其发回

    但是大部分时间我都没有定义"作为sendResponse发送的消息。

    我做了一个虚拟扩展来进一步调试,奇怪的是它有时只能工作。在比较请求的responseHeaders之后,我无法确定此行为的原因。

    我已将此用于测试,点击"相关搜索"纽扣。 https://www.gamiss.com/wholesale-cheap/buckle-leather-belt/

    我在这里缺少什么?

    的manifest.json

    {
        "manifest_version": 2,
        "content_scripts": [
          {
            "matches": [
              "<all_urls>"
            ],
            "all_frames": true,
            "js": ["testContent.js"]
          }
        ],
        "permissions": [
          "tabs",
          "webRequest",
          "<all_urls>"
        ],
        "background": {
          "scripts": ["testBackground.js"],
          "persistent": true
        }
    }
    

    testBackground.js

        chrome.webRequest.onResponseStarted.addListener(function(e){
        if(e.type === "main_frame"){
    
            console.log(e);
    
            chrome.tabs.query({
                active:true,
                currentWindow:true
            },function (tabs){
                chrome.tabs.sendMessage(tabs[0].id, {message: "Hi there..."}, function (response){
                    console.log(response);
                });
            });
        }
    
    },{ 
        urls: ["<all_urls>"],
        types: ["main_frame"]
    },["responseHeaders"]
    );
    

    testContent.js

    chrome.runtime.onMessage.addListener(
        function(request, sender, sendResponse) {
          if (request.message == "Hi there..."){
              console.log(request.message);
            sendResponse({response: "bye bye"});
            return true;
          } else {
              sendResponse({});
          }
    
        });
    

0 个答案:

没有答案