Phonegap Build CLI-5.2.0从Web应用程序中下载并关闭

时间:2016-09-14 18:51:33

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

我一直在努力打开窗口打开,在我的应用程序中使用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,并添加&#39; location = no&#39;等等,但没有骰子。这些是从我的远程站点加载的外部页面。

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

我尝试添加事件监听器,并执行脚本以返回href的值。然后将该值用于window.open(href,&#39; _system&#39;);来自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]始终为空。这似乎表明我没有在代码中做正确的事情:executioncript的一部分 - 或者$(this)实际上不是这个

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

1 个答案:

答案 0 :(得分:2)

在这里回答我自己的问题,所以任何面临类似情况的人都可以得到一个可靠的答案。我从其他帖子,参考资料和文档中将它拼凑在一起。

您想在InAppBrowser的远程加载网站中打开外部浏览器的链接吗?

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

enter image description here

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

这些是必要的,所以你有inappbrowser的句柄(在我的“关闭app”要求 - 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函数,在click上处理并查找类。类似的东西:

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

以上内容仅适用于Android。 尝试使用vanilla window.open('http://www.whatever.com','_ system`)不会在我的外部网站上打开iOS中的外部浏览器。我想过在我的外部网站里面使用另一个ref = cordova.inappbrowser.open()吗?这不起作用。有人有什么想法吗?