【发布时间】:2018-04-18 08:18:35
【问题描述】:
我目前正在开发一个 Firefox 插件,它利用权限 API 根据需要根据 <select> 的值动态请求特定来源的权限,因为用户更改了值,而没有单独的提交按钮。当我调用browser.permissions.request 时,承诺立即被拒绝并出现错误:
permissions.request 只能从用户输入处理程序中调用
相关的 HTML 和 JS 代码如下。我想避免使用单独的保存按钮,但我不知道如何实现。有没有可能,如果有,怎么做?
<div id="domain-settings">
Choose your preferred domain:
<select>
<option>example.com</option>
<option>one.example.com</option>
<option>other.example.com</option>
</select>
</form>
const settings = { domain: 'example.com' };
const $select = $('#domain-settings').find('select');
$select.on('change',function(e){
e.stopPropagation();
const oldValue = settings.domain;
const perm = { origins: [ `https://${$select.val()}/` ] };
browser.permissions.contains(perm)
.then(result => {
if (result)
someFunction();
else browser.permissions.request(perm)
.then(granted => {
if (granted)
someFunction();
else $select.val(oldValue);
});
})
})();
【问题讨论】:
-
我发现 Promise 也会导致问题,这就是我尝试直接从事件处理程序调用它的原因。这里使用的唯一承诺是内置方法返回的承诺。
标签: javascript firefox permissions firefox-addon firefox-addon-webextensions