Некоторые функции, которые обычно требуют разрешений на обычной веб-странице, также доступны в веб-просмотре. Однако вместо обычного всплывающего окна «веб-сайт xyz.com хочет узнать ваше физическое местоположение — разрешить / запретить» приложение, содержащее веб-просмотр, должно явно разрешить его. Вот как это работает:
webview.addEventListener('permissionrequest', function(e) {
if ( e.permission === 'geolocation' ) {
e.request.allow();
} else {
console.log('Denied permission '+e.permission+' requested by webview');
e.request.deny();
}
});
Следует отметить, что запрос не нужно обрабатывать немедленно. Вы можете делать все, что вам нужно, прежде чем разрешать или запрещать, если вы вызываете preventDefault
в событии запроса разрешения и предотвращаете сборку мусора для объекта события. Это полезно, если вам нужно выполнить какую-либо асинхронную операцию, например, перейти в хранилище, чтобы проверить, разрешен ли URL-адрес, запрашивающий разрешение, или нет.
Например:
webview.addEventListener('permissionrequest', function(e) {
if ( e.permission === 'geolocation' ) {
// Calling e.preventDefault() is necessary to delay the response.
// If the default is not prevented then the default action is to
// deny the permission request.
e.preventDefault();
setTimeout(function() { decidePermission(e); }, 0);
}
});
var decidePermission = function(e) {
if (e.url == 'http://www.google.com') {
e.request.allow();
}
// Calling e.request.deny() explicitly is not absolutely necessary because
// the request object is managed by the Javascript garbage collector.
// Once collected, the request will automatically be denied.
// If you wish to deny immediately call e.request.deny();
}
- Также обратите внимание, что ваше приложение также должно запрашивать соответствующее разрешение:
"permissions": ["geolocation"],
В примере веб-просмотра больше код для других разрешений, таких как pointerLock и захват мультимедиа.
person
mangini
schedule
30.04.2013