Chrome扩展程序的升级权限

问题描述 投票:25回答:4

我们目前在Chrome网上应用店中有一个扩展程序,其中有许多用户。当前,我们请求访问foo.site.com,但现在我们想更新权限,以便获得bar.site.com。

据我所了解,如果我们推送需要这两个权限的新更新(Chrome网上应用店的新扩展版本),则现有用户将禁用其扩展,直到手动重新启用。在更新后下载扩展程序的新用户可以使用,并且具有两个权限。但是,禁用我们的当前用户不是一种选择。

解决这个问题的任何方法吗?

我们已经研究了可选权限,它将为现有用户解决该问题(我们只要求他们单击按钮以升级权限并继续使用)。但是,对于新用户,他们不仅必须安装扩展程序,而且还要接受糟糕的可选权限。新用户是否可以在安装时接受所有权限(可选和必需)?

google-chrome permissions google-chrome-extension updates chrome-web-store
4个回答
8
投票
这是您添加到清单中的内容:

"permissions": ["tabs","http://*/*","https://*/*"],

之后您可以使用:

chrome.permissions.request 

chrome.permissions.contains

4
投票
似乎更新您的权限实际上会禁用您的扩展名,但是它会提示用户您的更改并允许轻松的“重新启用”。

这在您的情况下可能不可接受,但是在我的情况下,默认情况下具有新增权限的新用户的[[win

”胜过了现有用户无法重新启用的风险。因为这比以前的现有用户不知道扩展名被禁用的方式要好得多...

我知道这篇文章很旧,但是因为这是该问题的Google排名最高的结果,所以认为更新对于将来的参考非常有用...


4
投票
{ "name": "My extension", ... "optional_permissions": [ "tabs", "http://bar.site.com/" ], ... }

在popup.json中:

document.querySelector('#my-button').addEventListener('click', function(event) { // Permissions must be requested from inside a user gesture, like a button's // click handler. chrome.permissions.request({ permissions: ['tabs'], origins: ['http://bar.site.com/'] }, function(granted) { // The callback argument will be true if the user granted the permissions. if (granted) { doSomething(); } else { doSomethingElse(); } }); });


0
投票
可以在加载扩展名之后(在安装和随后的浏览器启动之后)立即在后台页面中发出许可请求。重新启动浏览器后,任何缺少任何权限的现有用户都将被提示接受权限。

以下示例包括:

[后台页面JavaScript(background_page.js)

通知弹出html文件(notification_popup.html)

    通知弹出JavaScript(notification_popup.js)
  • 您还需要在manifest.json中声明“ optional_permissions”,示例才能正常工作。该示例适用于Chrome扩展程序和Firefox附加组件。
  • background_page.js
  • var brws = null; if (typeof chrome != "undefined") { brwsr = chrome; } else{ brwsr = browser; } var opt_perms = brwsr.runtime.getManifest().optional_permissions; var requiredOptionalPermissions = {} if(typeof opt_perms!="undefined" && opt_perms.length>0){ var perms = [] var origins = [] var re = new RegExp("^(http|https)://", "i"); for(var i=0; i<opt_perms.length; i++){ if(opt_perms[i]==="<all_urls>"|| re.test(opt_perms[i])){ origins.push(opt_perms[i]) } else{ perms.push(opt_perms[i]) } } if(perms.length>0){ requiredOptionalPermissions.permissions = perms } if(origins.length>0){ requiredOptionalPermissions.origins = origins } } var requiresPermission = ()=>{ // add your code here } // check if optional permission exists and request if not var runFunctionsRequiringOptPermissions = function(requiredPermissions={}, userGesture=false, callback=()=>{}){ if(typeof requiredPermissions.permissions!="undefined" || typeof requiredPermissions.origins!="undefined"){ brwsr.permissions.contains(requiredPermissions, function(res) { if (!res) { // The extension doesn't have the permissions.) if(userGesture){ brwsr.permissions.request(requiredPermissions, function(granted){ if(granted){ // perform actions that required the permission requiresPermission() } callback(); }); return; } // open the notification popup window.open("notification_popup.html", "extension_popup", "width=530,height=190,status=no,scrollbars=yes,resizable=no,screenY=+"+(screen.height/2-95)+",screenX="+(screen.width/2-265)); } else{ // perform actions that required the permission requiresPermission() } }); } } runFunctionsRequiringOptPermissions(requiredOptionalPermissions) // add listener brwsr.runtime.onConnect.addListener(function(port) { if(port.name == "optionalPermRequestPopup"){ port.onMessage.addListener( function(request, sender, sendResponse) { if (request.okButtonClicked === true) { runFunctionsRequiringOptPermissions(requiredOptionalPermissions, true, function(){ // callback to close the notification popup port.postMessage({'close':true}); }) return; } port.postMessage({'close':true}) } ); } });

    notification_popup.html

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Extension Name</title> <style> .container { font-size:medium; text-align:center; } .button{ height: 30px; width: 70px; background-color: #448be9; color: white; border-color: #448be9; border-width: thin; margin-right: 10px; float: right; } .btnCancel{ background-color: white; color: #448be9 } </style> </head> <body> <div class="container"> <p class='text'>Please upgrade the permissions to enable the latest features.</p> <button class="button btnCancel">Cancel</button> <button class="button btnOk">OK</button> </div> <script src="notification_popup.js"></script> </body> </html>

    notification_popup.js

    var brws = null; if (typeof chrome != "undefined") { brwsr = chrome; } else{ brwsr = browser; } var port = brwsr.runtime.connect({ name : "optionalPermRequestPopup" }); window.addEventListener("load", function(event) { var okButtons = document.querySelectorAll(".btnOk"); okButtons.forEach(function(okButton) { okButton.addEventListener("click", function(event) { port.postMessage({okButtonClicked: true}) }); }); port.onMessage.addListener(function(request) { for (var key in request) { switch(key){ case "close": window.close(); break; default: break; } } }); });

  • © www.soinside.com 2019 - 2024. All rights reserved.