gpt4 book ai didi

android - Phonegap Build CLI-5.2.0 从 Web App 下载并关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:41 28 4
gpt4 key购买 nike

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

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

<!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') 在我的远程站点上调用时没有任何区别。使用事件监听器是否走在正确的轨道上?

最佳答案

在这里回答我自己的问题,以便遇到类似情况的任何人都能得到可靠的答案。我从其他帖子、引用资料和文档中将其拼凑在一起。

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

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

enter image description here

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

这些是必需的,因此您可以处理 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。尝试 Vanilla window.open(' http://www.whatever.com ', '_system') 不会从我的外部站点在 iOS 中打开外部浏览器。我想过在我的外部站点中使用另一个 ref = cordova.inappbrowser.open() 吗?那是行不通的。有人有什么想法吗?

关于android - Phonegap Build CLI-5.2.0 从 Web App 下载并关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39497649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com