【问题标题】:Phonegap Build CLI-5.2.0 Download and Close From Within Web AppPhonegap Build CLI-5.2.0 从 Web 应用程序内下载并关闭
【发布时间】:2016-09-14 18:51:33
【问题描述】:

我一直在努力使用我的应用程序中的 inappbrowser 来调用打开窗口。基本上,我使用 phonegap 作为包装器来加载具有特殊应用程序功能的移动皮肤 CMS 网站。

这里是 index.html。我正在使用 inappbrowser(位置设置为 no)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Emerald Test App</title>
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="viewport" content="width=device-width" /> 
    <script src="phonegap.js"></script>

    <script type='text/javascript'>
      var ref = null;
      function onLoad() {
       document.addEventListener("deviceready", onDeviceReady, false);
      }


     function onDeviceReady() {

      var url = 'https://my-cms-site.com/content.aspx?page_id=31&org_id=1&app=1';
      var target = '_blank';
      var options = "location=no"
      ref = cordova.InAppBrowser.open(url, target, options);

     }

</script>
</head>


<body onload="onLoad()">
</body>
</html>

我要做的是在系统浏览器中打开链接 - 从我通过 inappbrowser 加载的外部站点

我尝试使用类似的文档和来自类似帖子的建议下载文件

<script type="text/javascript">
        window.open(url, '_system');
</script>

还有 _blank,并添加 'location=no' 等,但没有骰子。这些是从我的远程站点加载的外部页面。

点击这些链接时,它们会在同一个浏览器(inappbrowser 或 webview)中打开并接管浏览器。我要做的是在另一个系统浏览器(chrome、safari 等)中打开它们。这将解决我的下载问题(因为文件有望在系统浏览器中打开,用户可以弄清楚如何处理它们)。

我尝试添加一个事件侦听器,并执行脚本以返回 href 的值。然后将该值用于 window.open(href,'_system');来自 index.html(而不是远程页面)。因为在索引上,我还是会有对inappbrowser的引用。

   ref.addEventListener( "loadstop", function() {
   ref.executeScript(
        { code: "var gbal = null; $('a').on('click', function() { gbal = $(this).attr('href'); }); (function runIt() { return gbal })();" },
        function( values ) {
            if (values != null) {
            //alert( values[ 0 ] );
             window.open(values[0],'_system');
            }

        }
          );
       });
   }

值[0] 始终为空。这似乎表明我在代码中没有正确执行某些操作:executescript 的一部分 - 或 $(this) 并不是真正的 this

所以,一个大问题 - 我如何在系统浏览器中打开我的外部站点中的链接。 window.open('whatever.htm', '_XXXXX') 在我的远程站点上调用时没有区别。通过使用事件侦听器,我是否走在正确的轨道上?

【问题讨论】:

    标签: android jquery cordova phonegap-plugins phonegap-build


    【解决方案1】:

    在这里回答我自己的问题,这样任何面临类似情况的人都可以获得可靠的答案。我是从其他帖子、参考资料和文档中拼凑出来的。

    所以您想在 InAppBrowser 的远程加载站点中打开一个指向外部浏览器的链接?

    在您的远程站点上,您需要将脚本 src 包含到您的 cordova.js 文件、cordova_plugins.js 文件中,并包含您的插件文件夹。这些文件必须托管在您的远程站点上。 如果我知道它是“应用程序”,我会选择有条件地加载我的。加载 Cordova 文件时会引发一系列警报,因此除非您知道它是应用程序,否则您不会想要加载这些文件。

    您从哪里获得这些文件?我安装了 Phonegap Desktop 并使用了构建中的文件,但有一些参考错误。我改为使用 Phonegap Build,并从 APK 中提取文件。将 appname.apk 重命名为 appname.apk.zip 并将所需的 js 文件提取/复制到我的服务器。 *存在平台差异的一些问题,需要为 iOS/Android 更改和有条件地加载 cordova.js 文件。

    这些是必要的,因此您可以处理 inappbrowser(在我的“关闭应用程序”要求的情况下 - navigator)。

    在我的远程(外部)站点上(在我加载了cordova/插件之后)我现在可以通过一个简单的调用来关闭应用程序 navigator.app.exitApp();

    在我在 inappbrowser 中加载的远程(外部)站点的页面中,我现在可以通过执行以下操作打开外部页面中的链接:

    <a onclick="loadUrl('http://google.com'); return false;" href="#">Test link, don't click</a>
    
    <script type="text/javascript">
    $('.closeapp').click(function() {
    navigator.app.exitApp(); //this only works on Android. iOS doesn't allow for programmatic exit
    });
    function loadUrl(url){
        navigator.app.loadUrl(url, { openExternal:true });
        return false;
    }
    </script>
    

    我计划使用 jquery 修改 loadURL 函数,以便在单击时处理并查找类。比如:

    $('.downloadable').click(function() {
    var url = $(this).attr('href');
    navigator.app.loadUrl(url, { openExternal:true });
    });
    

    以上内容仅适用于 Android。 尝试香草 window.open('http://www.whatever.com', '_system') 不会从我的外部站点在 iOS 中打开外部浏览器。我想过在我的外部站点内部使用另一个 ref = cordova.inappbrowser.open() 吗?那是行不通的。有人有什么想法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2013-09-18
      • 2023-03-06
      相关资源
      最近更新 更多