首页 > 解决方案 > 为什么 Chrome DevTools Network 没有响应?

问题描述

我一直在尝试使用 Devtools 'copy as fetch' 来获取一些 url,但我看不到任何响应。如果我尝试重播 xhr,它将起作用。这很奇怪,因为它不适用于这个特定的站点,但是如果我在其他一些站点上尝试“复制为获取”,它确实会带来结果。

我正在尝试做的是获取响应正文并以其他方式显示它(它是一个调度软件,我正在尝试修改它显示日历视图的方式,因为它将所有内容一起显示)。

我有一个扩展,可以让我修改 XMLHttpRequest,这样我就可以获得任何 XHR 的响应,但是由于第一个异步在我注入脚本之前执行,所以我总是错过第一个。

我计划使用 chrome webRequest 停止第一个并再次获取它。

清单.json

{
    "name": "jobber",
    "version": "2.0",
    "description": "Build an Extension!",
    "manifest_version": 2, 
    "permissions": [
        "webNavigation", 
        "webRequest", 
        "*://secure.name.com/*"
    ], 
    "content_scripts": [{
        "matches": ["*://secure.name.com/calendar*"],
        "js": ["contents.js"],
        "run-at": "document_start"
    }], 
    "externally_connectable": {
        "matches": ["*://secure.name.com/calendar*"]
    }, 
    "background": {
        "scripts": ["background.js"]
    }
}

内容.js

(function () {
    'use strict';

    let s = document.createElement("script"); 
    s.textContent = overloadXHR(); 
    document.head.insertBefore(s, document.head.children[0]);
    s = document.createElement("script"); 
    s.textContent = displayCalendar; 
    document.head.insertBefore(s, document.head.children[0]); 
})();

function overloadXHR() {
    const text = `
        console.log(\`overriding: \${Date.now()}\`); 
        const rawOpen = XMLHttpRequest.prototype.open; 
        let json = []; 
        (function(){ 
            XMLHttpRequest.prototype.open = function () {
                this.addEventListener("readystatechange", e => { 
                    if (/secure.name.com.calendar.*?calendar=true/i.test(this.responseURL)) {
                        if ((this.status == 200) && (this.readyState == 4)) {
                            console.log(this.readyState);
                            try {
                                json = JSON.parse(this.response); 
                                window.setTimeout(() => (window.displayCalendar({json}))({json}), 1000); 
                            }
                            catch (e) { console.log(e); }
                        }
                    }
                });
                rawOpen.apply(this, arguments);
            }
        }())
    `; 
    return text; 
}
function displayCalendar({ json }) {
    // do something 
}

我也尝试过 POST 请求。我可以看到它们会起作用,但没有给出任何回应。

标签: google-chromegoogle-chrome-extensionfetch

解决方案


推荐阅读