ฉันสร้างส่วนขยาย Firefox ที่ได้รับ URL คำขอทั้งหมดและแสดงไว้ แต่โค้ดจะใช้ได้เฉพาะเมื่อฉันวางลงในคอนโซลเท่านั้น
เมื่อโหลดส่วนขยายแล้ว มันไม่แสดงข้อผิดพลาดใด ๆ ดูเหมือนว่ามันจะไม่ทำงาน
นี่คือรหัสเต็ม
xhrScript.js
(function(){
const proxiedOpen = XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function ( _, url) {
this.__URL = url;
return proxiedOpen.apply(this, arguments);
};
const proxiedSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function () {
const { protocol, host } = window.location;
// showing only when it paste in console
console.log("full request url ", `${protocol}//${host}${this.__URL}`);
return proxiedSend.apply(this, [].slice.call(arguments));
};
})();
// this works all times
document.body.style.border = "7px solid blue";
manifest.json
{
"manifest_version": 2,
"name": "XHR request urls",
"version": "1.0",
"description": "get all the request url's",
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["xhrScript.js"]
}
]
}
อย่างที่คุณเห็นในบรรทัดสุดท้ายคือ document.body.style.border = "7px solid blue";
ซึ่งใช้ได้ดีทุกครั้ง แต่วิธี XMLHttpRequest open
และ send
ใช้งานไม่ได้ ใช้งานได้เฉพาะเมื่อฉันวางโค้ดลงในคอนโซล
หากคุณต้องการดูตัวอย่าง คุณสามารถลองคัดลอกและวางโค้ด xhrScript.js
ใน https://reactjs.org (เป็น SPA ดังนั้นจึงเป็นเรื่องง่ายที่จะตรวจสอบสิ่งที่ฉันต้องการ) ในคอนโซล devTools และดูคำขอทั้งหมด
ฉันไม่รู้ว่าทำไมรหัสนี้จึงทำงานเฉพาะเมื่อวางในคอนโซลเท่านั้น