我有一个cordova应用程序,可以直接从客户端网站加载内容。我已经像config.xml文件中的<content src="https://example.com/ios/index.html">
一样使用了它。我使用了6秒的防溅屏延迟。问题是当防溅屏隐藏时会显示黑屏5-10秒,然后显示客户端网站内容。有时我会收到错误CONNECTION TO SERVER WAS UNSUCCESSFULL。我也指定了<preference name="loadUrlTimeoutValue" value="700000" />
,但仍然有同样的问题。有人对cordova ios和android应用程序有同样的问题吗?有人能帮我解决这个问题吗。
你不应该那样做。现在我不想播放这个剧本,你问A,我告诉你做B,别担心,但这真的不是你应该做的。
您应该让cordova加载一个index.html,该index.html加载一个javascript文件cordova.js
。你不需要实际拥有它,编译应用程序时会包含js文件。
然后你应该添加白名单插件,以防你还没有,这样你的网站才能正确加载。https://www.npmjs.com/package/cordova-plugin-whitelist
您应该在config.xml中禁用splashscreen的自动隐藏,如下所示:
<preference name="AutoHideSplashScreen" value="false" />
然后,你应该让javascript像这样加载你的网站的全屏iframe,然后检测加载何时完成:(这应该进入你的index.html,在cordova应用程序中(
<html>
<head>
<title></title>
</head>
<body>
<iframe id='frameid' onload='iframeLoaded();' src='https://mywebsite.com/mypage.html' style='border: 0; width: 100%; height: 100%'>Your browser doesn't support iFrames.</iframe>
<script src='cordova.js'></script>
<script>
iframe = document.getElementById("frameid");
iframe = document.getElementById("frameid");
function ready(callback){
// in case the document is already rendered
if (iframe.readyState!='loading') callback();
// modern browsers
else if (iframe.addEventListener) iframe.addEventListener('DOMContentLoaded', callback);
// IE <= 8
else document.attachEvent('onreadystatechange', function(){
if (iframe.readyState=='complete') callback();
});
}
ready(function(){
setTimeout(function(){
navigator.splashscreen.hide();
},555)
});
</script>
</body>
</html>
我已经几个月没用科多瓦了,但如果我什么都没忘记的话,我就是这么做的——希望我没有。。。我没有时间测试这个,但你明白要点了:
- 应用程序启动
- 显示启动屏幕
- 在指向https网站的全屏中加载带有Iframe的Index.html
- 等待iframe完成加载
- 关闭防溅屏
如果您遇到任何问题,请告诉我,我可以进一步帮助您。