Tôi đã thấy vô số ví dụ về việc tạo yêu cầu xhr từ Tiện ích bổ sung của Firefox, nhưng tôi đang cố gắng sử dụng công cụ mới WebExtensions (trong đó require
và Components
không xác định) và dường như không hiểu tại sao Tôi không thể gửi một XmlHttpRequest đơn giản từ bên trong phần mở rộng?XMLHttpRequest từ Firefox WebExtension
Cần lưu ý rằng yêu cầu ajax sẽ đến một URL hoàn toàn khác, nhưng máy chủ có COR được đặt để cho phép tất cả các nguồn gốc.
Ngay sau khi .send()
là bắn tôi nhận được lỗi:
[Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: resource://gre/modules/ExtensionContent.jsm -> moz-extension://9ca18411-9a95-4fda-8184-9dcd3448a41a/myapp.js :: GM_xmlhttpRequest :: line 162" data: no]"1 whatsapp.js:166:9
Mã này trông như thế này:
function GM_xmlhttpRequest(orders) {
try {
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function(a1, a2, a3) {
console.log('xhr.load: %s, %s, %s', a1, a2, a3);
});
// open synchronously
oReq.open(orders.method, orders.url, false);
// headers
for (var key in orders.headers) {
oReq.setRequestHeader(key, orders.headers[key]);
}
// send
var res = oReq.send(orders.data);
console.log('xhr result: %s', res);
} catch(e) {
debugger;
console.warn('could not send ajax request %s to %s, reason %s', orders.method, orders.url, e.toString());
}
}
Tôi đã thêm quyền WebRequest để manifest.json của tôi, tôi nhận ra rằng không phải là những gì nó có nghĩa là, nhưng tôi đang đấu tranh để hiểu những gì đang ngăn chặn các yêu cầu ajax? Bất kỳ ý tưởng?
{
"manifest_version": 2,
"name": "MyApp",
"version": "1.0",
"description": "TestXHR",
"icons": {
"48": "icons/myapp-48.png"
},
"applications": {
"gecko": {
"id": "[email protected]",
"strict_min_version": "45.0"
}
},
"content_scripts": [
{
"matches": ["*://web.myapp.com/*"],
"js": ["myapp.js"]
}
],
"permissions": [
"https://thehost.all-xhr-sent-here.net/*",
"webRequest"
]
}
Bạn có thể thử [tìm nạp] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch). –
Thats thú vị. XHR nên làm việc như nó từ bất kỳ trang web, miễn là bạn làm điều đó từ background.js hoặc popup.js tôi sẽ nghĩ. – Noitidart
Hoạt động từ bên trong tiện ích mở rộng web, điều này liên quan đến URL quyền hạn – tommed