我有index.html,我在脚本标记中添加了deviceready
事件监听器。但是在加载HTML时不会触发它。相反,当点击主页按钮时,它会从onAppDidEnterBackground
中的CDVViewController
方法触发。
我想调用我的自定义插件来获取我在加载的HTML中填充的值。我发现很少有解决方案要求更改元标记。我确实尝试过改变,但没有用。它在iOS9中也不起作用。我想meta标签问题来自iOS10。我不确定我在这里缺少什么。
Cordova v4.4.0
的index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: http://* 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<title>My HTML Document</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src='cordova.js'></script>
<script type="text/javascript" src='CustomPlugin.js'></script>
<script>
document.addEventListener('deviceready', function () {
window.plugins.CustomPlugin.myMethod(function (result) {
document.getElementById('Name').value = result['Name'];
}, function (error) {
alert(error);
});
}, false);
</script>
</head>
<body>
<div class='article'>
<div class='tableWrapper'>
<table>
<tr>
<td class='right'>CName:</td>
<td colspan='3'><input type='text' id='Name'/></td>
</tr>
</table>
</div>
</div>
</body>
</html>
答案 0 :(得分:2)
如果您遇到的问题与我相同,那么这与您的内容安全策略元标记有关。我使用了this answer中的以下内容,问题已解决。
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap://* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
答案 1 :(得分:0)
尝试将addEventListener放入函数onLoad并使用body标签中的onload事件调用它:
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady(){
//the code you want to execute
}
和
<body onload="onLoad()">
因为如果按照自己的方式进行操作,那么在加载cordova库之前,您正尝试执行deviceready事件。
答案 2 :(得分:0)
将所有脚本加载到html正文的底部
<html lang="en">
<head>...</head>
<body>
<div>Your content here</div>
...
<script type="text/javascript" src='CustomPlugin.js'></script>
<script type="text/javascript" src='cordova.js'></script>
<script type="text/javascript" src='main.js'></script>
</body>
</html>
并创建main.js文件,然后将代码放在那里..
window.onload = function(){
document.addEventListener("deviceready", firstInitCordova, true);
};
function firstInitCordova(){
if(!window.cordova){
// If cordova is not defined then call this function again after 2 second
setTimeout(firstInitCordova, 2000);
return;
}
//console.log(window.plugins);
window.plugins.CustomPlugin.myMethod(function (result) {
document.getElementById('Name').value = result['Name'];
}, function (error) {
alert(error);
});
}
// If you're unsure then set a timer
setTimeout(function(){
firstInitCordova();
}, 3000);