1

我希望我的Web擴展可以對用戶當前正在查看的網站進行AJAX調用。我知道當前網站的終端號碼爲/foo/bar?query=Firefox WebExtensions API如何使AJAX調用到當前選項卡網站

有沒有什麼東西阻止我使用fetch APIXMLHttpRequest聯繫此端點?

我試圖使用這些方法只是告訴我發生了一個服務器錯誤,當我試圖調試我的擴展時,網絡選項卡中沒有任何東西出現。我覺得這個任務應該有一個WebExtensions API,但我找不到。

+0

請編輯題目:包括一個複製問題的[mcve]。對於Chrome擴展程序或Firefox WebExtensions,這通常意味着包含您的* manifest.json *以及一些背景,內容和/或彈出式腳本/ HTML。尋求調試幫助的問題(「爲什麼代碼不按我想要的方式工作?」)必須包括:(1)期望的行爲,(2)特定問題或錯誤,以及(3)重現它所需的最短代碼*在問題本身*。另請參閱:[我可以在這裏詢問什麼主題?](http://stackoverflow.com/help/on-topic)和[問]。 – Makyen

回答

1

您可以使用browser.tabs.getCurrent()獲取描述用戶正在查看的當前選項卡的對象。這個對象有一個屬性url,然後你可以使用它來創建一個XMLHttpRequest。

browser.tabs.getCurrent().then(currentTab => { 
    let xhr = new XMLHttpRequest(); 
    xhr.open("GET", currentTab.url); 
    // ... 
}); 

編輯:
正如Makyen,tabs.currentTab指出,其實不是你想要的。應該使用tabs.query而使用active: true。這樣的東西應該工作:

browser.tabs.query({active: true, currentWindow: true}).then(tabs => { 
    let currentTab = tabs[0]; 
    let xhr = new XMLHttpRequest(); 
    xhr.open("GET", currentTab.url); 
    // ... 
}) 

爲了使交叉起源的請求,你將需要獲得許可,您manifest.json文件:

{ 
    ... 
    "permissions": [ 
    "tabs", 
    "<all_urls>" 
    ], 
    ... 
} 

<all_urls>例如將允許你做出HTTP請求任何網址。

您可以閱讀更多here

+0

你測試過這段代碼嗎?每當我嘗試創建XMLHttpRequest時,我似乎都會遇到錯誤。 – Harvey

+1

我沒有測試過它。它應該工作,但。什麼是你得到的錯誤信息?你有沒有在你的manifest.json中設置所需的權限? – Forivin

+1

['tabs.getCurrent()'](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/getCurrent)獲取代碼運行的當前選項卡。在大多數情況下,* *不會是用戶正在查看的網頁的網址,除非他們正在查看您的擴展選項頁面或來自擴展內部的其他HTML頁面。如果你想使用'chrome.tabs.query({active:true,currentWindow:true},callback)'當前窗口的活動標籤''。 – Makyen

相關問題