2014-12-27 3 views
0

В расширении Chrome я хочу попросить пользователя получить полный доступ к страницам через ссылку всплывающего окна browser_action (так же, как всплывающее окно панели инструментов со ссылкой). Когда пользователь нажимает на ссылку, я получаю эту ошибку:Расширение Chrome: функция должна вызываться во время пользовательского жеста

runtime.lastError while running permissions.request: This function must be called during a user gesture

Тем не менее, пользователь действительно нажал на ссылку и «пользовательский жест». Любые идеи о том, как отлаживать то, что считается жестом пользователя?

на кнопку мыши, я прошу полный доступ через chrome.permissions.request API Chrome:

$('#button-requestpermissions').click(function(){ 
    requestAmbientPermission(function(granted) { 
    if (granted) { 
     // code never reached as granted === false 
    } 
    }); 
}); 

function requestAmbientPermission(callback){ 
    // Permissions must be requested from inside a user gesture, like a button's click handler. 
    chrome.permissions.request({ 
     permissions: ['activeTab'], 
     origins: ['<all_urls>'] 
    }, callback); 
} 

манифеста имеет дополнительные полномочия, установленные таким образом:

"permissions": [ 
    "https://www.meethue.com/", 
    "https://colorlovers.herokuapp.com/" 
    ], 
    "optional_permissions": [ 
    "activeTab", 
    "<all_urls>" 
    ], 
+0

Вероятно код разрешения запроса необходимо выполнить от фона страницы не сценарий содержимого –

+0

Zig, я попытался выполнить команду bruteforse - выполнение разрешений. Запрашивание с фоновой страницы вызывает такую ​​же ошибку. – cDima

+0

Обратите внимание: разрешение 'activeTab' не генерирует никаких предупреждений. Это было сделано для этой конкретной цели (https://developer.chrome.com/extensions/activeTab). Поэтому нет необходимости делать это необязательным. – Xan

ответ

0

Слишком поздно, чтобы ответить? Вы можете запросить только новое разрешение от действий пользователя, например, кнопка нажата:

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://www.google.com/'] 
    }, function(granted) { 
     // The callback argument will be true if the user granted the permissions. 
     if (granted) { 
     doSomething(); 
     } else { 
     doSomethingElse(); 
     } 
    }); 
}); 

Подробное объяснение можно найти here

Смежные вопросы