6

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 đó requireComponents 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" 
    ] 
    } 
+1

Bạn có thể thử [tìm nạp] (https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch). –

+1

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

+0

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

Trả lời

4

Sự cố là URL quyền được chỉ định. Tôi đã thay đổi tên miền phụ thành dấu hoa thị và giao thức thành dấu hoa thị và nó dường như hoạt động sau đó.

+2

Có thể đáng giá cài đặt Tiện ích bổ sung tiêu đề HTTP trực tiếp, bật tất cả hộp kiểm và xem những gì đang thực sự được tải. Là nó chuyển giao thức từ http đến https? Chuyển đổi các tên miền phụ sub1.dom.tld sub2.dom.tld sub3.dom.tld? – user314159

+0

user314159 là đúng. Trường hợp của tôi là 302 chuyển hướng. Phát hiện bằng cách sử dụng fiddler. – Dummy

Các vấn đề liên quan