【问题标题】:Cordova - Load External URL content in app takes too much timeCordova - 在应用程序中加载外部 URL 内容需要太多时间
【发布时间】:2021-08-15 18:04:53
【问题描述】:

我有一个直接从客户端网站加载内容的 Cordova 应用程序。我在 config.xml 文件中像 <content src="https://example.com/ios/index.html"> 一样使用它。我使用了 6 秒的闪屏延迟。问题是闪屏隐藏时显示黑屏 5-10 秒,然后显示客户端网站内容。有时我收到错误连接到服务器不成功。我还指定了<preference name="loadUrlTimeoutValue" value="700000" />,但仍然有同样的问题。任何人都有同样的问题cordova ios 和 android app?谁能帮我解决这个问题。

【问题讨论】:

    标签: android ios cordova web external-url


    【解决方案1】:

    你不应该那样做。现在我不想在你问 A 而我告诉你做 B 的地方播放这个脚本,别担心,但这确实不是你应该做的方式。

    你应该让cordova加载一个index.html,它加载一个javascript文件cordova.js。实际不需要,编译时会包含js文件。

    然后您应该添加白名单插件以防您尚未添加,以便您的网站正确加载。 https://www.npmjs.com/package/cordova-plugin-whitelist

    您应该像这样在 config.xml 中禁用启动画面的自动隐藏功能:

    <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 完成加载。
    • 关闭启动画面

    如果您遇到任何问题,请告诉我,我可以进一步帮助您。

    【讨论】:

    • 是的,它有效。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多