为什么Chrome DevTools Network没有响应?

mkshixfv  于 2023-04-09  发布在  Go
关注(0)|答案(1)|浏览(407)

我一直在尝试使用Devtools '复制作为获取'获取一些URL,但我看不到任何响应。如果我尝试重播xhr,它会工作。这很奇怪,因为它不适用于这个特定的网站,但如果我尝试'复制作为获取'在其他一些网站上,它确实会带来结果。
我想做的是抓住响应主体并以其他方式显示它(这是一个日程安排软件,我试图修改它显示日历视图的方式,因为它将所有内容显示在一起)。
我有一个扩展,使我能够修改XMLHttpRequest,这样我就可以得到任何XHR的响应,但由于第一个异步执行之前,我注入脚本,那么我总是错过了第一个。
我计划使用chrome webRequest来停止第一个并再次获取它。
manifest.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"]
    }
}

contents.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请求。我可以看到它们会起作用,但没有给出任何响应。

  • 原始请求:

  • 复制为提取

  • 复制为提取响应

  • 复制为提取定时

svmlkihl

svmlkihl1#

解决此问题的一种方法是添加以下内容之一:

.then(response => response.text()).then(console.log)

.then(response => response.json()).then(console.log)

在控制台中的fetch表达式之后

相关问题