Safari14:chrome.permissions.request()无法无缝工作,tab.url始终为空-扩展



我有一个工作的跨平台扩展,我使用xcrun safari-web-extension-converter PATH将其转换为Safari扩展的目标是将任何URL添加到我的网站帐户中(https://ourdomain.in)

我的扩展程序在Chrome上运行得很好,但在Safari版本上,如果用户允许访问每个网站,一切都会很好。

问题是,即使我有合适的optional_permissions,并使用chrome.permissions.request()方法请求用户同意我们的domain.in,并且我们看到用户允许访问,但tab.url每次对chrome.tabs.onUpdated都是空的。

详细情况如下,当用户按下扩展按钮时,我们通过将我们的网站URL打开到另一个选项卡来检查用户是否登录到其帐户。

var openSignin = function openSignin() {
console.log('hey');
chrome.tabs.create({ url: _config.baseURL + '?extension=1', active: false });
};

当这个AUTH选项卡被加载时,以下方法将被调用,就像在Chrome中发生的那样,它依次提取任何用户登录我们的网站时生成的公共和私有令牌。

chrome.tabs.onUpdated.addListener(function (tabID, changeInfo, tab) {
if (tab.status == 'complete' && tab.url.startsWith(_config.baseURL)) {
chrome.tabs.executeScript(tab.id, { code: 'localStorage.getItem("PUBLIC")' }, function (r) {
localStorage['PUBLIC'] = JSON.parse(r[0]);
chrome.tabs.executeScript(tab.id, { code: 'localStorage.getItem("PRIVATE")' }, function (r) {
localStorage['PRIVATE'] = JSON.parse(r[0]);
if (localStorage['PRIVATE'] && tab.url === _config.baseURL + '?extension=1') {
chrome.tabs.remove(tabID);
}
});
});
}
});

这里的问题在于,直到用户不同意">在每个网站上总是允许";(我的意思是授予https://ourdomain.in/extension?extension=1权限(,chrome.tabs.onUpdatetab.url = "",但它没有给出正确的URL值,所以我们的条件不匹配,并且知道特定用户是否登录。

以下是我们的manifest.json,其中我使用了事件optional_permissions:

{
"name": "EXT NAME",
"description": "DESCRIPTION",
"manifest_version": 2,
"version": "1.0.181",
"minimum_chrome_version": "23",
"offline_enabled": true, 
"browser_action" : {
"default_icon" : {
"64": "logo/icon.png"
},
"default_title" : "Add here"
},
"background" : {
"scripts" : [
"background.js"
]
},
"content_scripts": [{
"js": [ "content.js" ],
"matches": [ "<all_urls>" ]
}],
"icons": {
"16": "logo/icon_small.png",
"64": "logo/icon.png"
},
"permissions" : [
"https://*.ourdomain.in/*",
"activeTab",
"gcm",
"storage",
"notifications",
"identity",
"contextMenus",
"tabs",
"idle"
],
"externally_connectable": {
"matches": ["https://*.ourdomain.in/*"]
},
"optional_permissions": ["activeTab", "tabs", "storage", "contextMenus", "*://*.ourdomain.in/*"],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"web_accessible_resources": [
"corner.css",
"js/init.js",
"content.js",
"js/jquery.min.js",
"js/taggle.min.js",
"js/typeahead.bundle.min.js",
"ext.html.js",
"assets/*"
], 
"commands": {
"_execute_browser_action": {
"suggested_key": {
"default": "Ctrl+Shift+S",
"mac": "Command+Shift+S"
},
"description": "Send a link to DOMAIN!"
}
}
}

下面是在扩展按钮的点击事件处理程序中实现的权限请求的代码。

chrome.browserAction.onClicked.addListener(function (tab) {
var reqPerm = {
permissions: ["activeTab", "tabs", "storage", "contextMenus"],
origins: ['https://ourdomain.in/']
};

chrome.permissions.request(reqPerm, function (granted) {
if (granted) {
return go(tab.url);
} else {
console.log("Requested not granted.");
chrome.tabs.sendMessage(tabID, { action: 'signin', text: 'Please allow stash.ai to proceed.' });
}
});
});

在这里,我可以看到"隐私"对话框,并按允许一天

现在,如果我在Safari>首选项>网站>Stash Extension,我清楚地看到了ourdomain.in->我相信Allowed证明了它的及时性。

仍然当打开新的选项卡进行验证时,执行上述用于chrome.tabs.onUpdate的代码并给出tab.url = ''。当允许每个网站打开时,这肯定有效。

另一件事是,当我打开https://ourdomain.in时,我的扩展图标仍然显示为禁用,单击该图标时,它会再次向我请求权限。如果在这个选项卡上,我确实允许,一切都会顺利进行。

因此,如果我必须手动从选项卡授予权限,chrome.permissions.request()是没有用的。

请告诉我这里的任何建议。

答案很简单,我必须更改我的reqPerm,比如

var reqPerm = {
permissions: ["activeTab", "tabs", "storage", "contextMenus"],
origins: ['https://ourdomain.in/*']
};

因此,我们domain.in中的每个端点都有效。

相关内容

  • 没有找到相关文章

最新更新