1

У меня проблема с моим расширением Chrome, в точности с файлом манифеста.Расширение Chrome: схема «файл: //» не разрешена в «разрешениях»

{ 
    "manifest_version": 2, 

    "permissions": [ 
    "file://*/*", 
    "activeTab", 
    "http://www.pdfzorro.com/" 
    ], 

    "name": "PDFzorro - PDF Editor", 
    "version": "0.0.0.11", 
    "short_name": "PDF-Dateien bearbeiten - edit PDF files", 
    "description": "edit PDF files online, direct from GoogleDrive", 
    "icons": { "16": "logo16.png", 
      "128": "logo.png" }, 

    "container": ["GOOGLE_DRIVE"], 
    "api_console_project_id": "000000000000", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    } 
} 

В Dev-Mod расширение работает в Chrome. Но я не могу загрузить zipped расширение в Интернет-магазин Chrome.

Error: Schema "file://" not allowed in "permissions"

Я попытался также:

file:/// 
file:// 
file:///* 
file://*/* 

..но ничего не работает.

Единственный способ, которым работает приложение, и загрузка - это добавить <all_urls> к разрешениям. Но я не хочу, чтобы это было разрешено из-за предупреждений при установке приложения.

+0

Интересно. Объявление '' '' в разрешениях _optional_ по-прежнему вызывает предупреждение. – Xan

+0

Ничего, это потому, что я уже имплицитно предоставил их. – Xan

ответ

0

Вы можете объявить "<all_urls>" как optional permission и запросить источник во время выполнения.

Просто наличие в дополнительных разрешениях указывает флажок «Разрешить доступ к файлу: URL-адреса», который нужно пометить в любом случае.

Вы можете узнать состояние этого флага, поскольку источник будет считаться недействительным, если он не установлен. Итак:

chrome.permissions.contains(
    {origins: ["file://*"]}, 
    function(granted){ 
    if(chrome.runtime.lastError) { 
     // The flag is not set 
     // You need to explain it to the user and then show the page 
     // You can open the page scrolled where you need it with the following: 
     // chrome.tabs.create({ url: "chrome://extensions?id=" + chrome.runtime.id }); 
     // Note that just a link won't work 
    } else if(!granted) { 
     // The flag is set, but the permissions are not yet granted 
     // You need to call the next snippet FROM A USER GESTURE (e.g. click) 
    } else { 
     // Everything is peachy, you have the permissions 
    } 
    } 
); 

После того, что флаг галочки, вы можете вызвать следующую от пользователя жеста получить разрешение:

chrome.permissions.request(
    {origins: ["file://*"]}, 
    function(granted) { 
    if(!granted) { 
     // Should never happen (see below) 
    } else { 
     // Everything is peachy now 
    } 
    } 
); 

Это всегда преуспевать без диалога с пользователем, как если флаг установлен, но должен быть вызван с жетона пользователя один раз. Разрешения на выдачу разрешений сохраняются на протяжении всего срока службы установки.

Это не даст предупреждения при установке, и CWS должен сделать это.

+0

ОК, я попробую это –

+0

Обратите внимание, что это не очень удобно для пользователей: им нужно прочитать инструкции, отметьте галочкой на другой странице, с которой вы не можете взаимодействовать, а затем нажмите что-нибудь еще в своем пользовательском интерфейсе. Но это цена не-полных разрешений. – Xan

+0

да я знаю :-) Я думаю об этом, и я, возможно, установлю разрешение all_urls ;-) –