0

我開發了一個與IP電話通信的Chrome擴展。瀏覽器重啓後Chrome瀏覽器擴展失去請求的權限

通信在通過XMLHttpRequest對象發送POST請求的事件頁面中完成。

由於電話的主機名或IP地址在選項頁面中配置,因此我在清單文件中添加了optional_permissions,並在用chrome.permissions.request保存選項後向用戶請求。

,直到我重新啓動鉻跨來源XHR現在工作沒有任何問題......

重新啓動Chrome瀏覽器後,好像請求的權限丟失,我得到的典型 is not allowed by Access-Control-Allow-Origin錯誤。

當我點擊擴展權限時,我也可以看到我的請求的權限不再列出。

由於chrome.permissions.request僅適用於用戶手勢,所以在加載我的擴展程序或運行時無法請求它。如果我在我的選項頁面中再次請求權限,我不會再被問到是否允許或不允許將權限授予,並且所有事情都照常進行。

有沒有辦法讓這個權限在請求後被持久授予?我只想讓擴展程序訪問它所需的端點。

非常感謝。

+0

聽起來像一個錯誤。我還沒有遇到Chrome中可選許可API的問題。你確定你沒有撤銷其他地方的權限嗎? –

+0

我想不出我怎麼可能撤銷它。到目前爲止,我的代碼中沒有對'chrome.permissions.remove'的調用。我的清單文件中的行如下所示:''optional_permissions「:[」*:// */CGI/Execute「]'我的請求如下所示:'chrome.permissions.request({origins:['http: //'+ phoneAdress +'/ CGI/Execute']},...' – Chris

+1

我猜這個問題在你申請'*:// */CGI/Execute'而不是聲明的可選權限的子集時解決了 –

回答

3

對於我以下報告的問題回答了我的問題: Issue 158004: chrome.permissions.request support for user-supplied URL

要說清楚:無法請求optional_permissions中定義的權限子集。如果你定義了http://*/*那麼你需要精確地請求這個字符串!子集像http://example.org/*不會工作!

這裏是從問題描述註釋報價,這使得清楚了: 「沒有通配符處理的URL模式之間只是簡單的字符串比較」

問題已被固定在Revision 182287

剩下的唯一要做的就是跨越你的手指,這個修補程序很快就會被包含在一個upcomming chrome發佈中。在此期間,我們必須使用血腥的Access your data on all websites權限。

+0

你有沒有設法使用'http:// * /'/'https:// * /''可選的權限來達到預期的效果?看起來他們仍然在鉻36重置。 –

+0

目前沒有似乎是同樣的問題。我再次檢查了它,但是和以前一樣。 – Chris

+2

此功能現在可用。從[documentation](https://developer.chrome.com/extensions/permissions):'如果您想請求僅在運行時發現的主機,請包含「http:// * /」和/或「https: // * /「作爲optional_permission。這使您可以在Permissions.origins中指定任何來源,只要它具有匹配的方案即可 –