如何处理phonegap应用程序中iphone上丢失的硬件后退按钮?
Posted
技术标签:
【中文标题】如何处理phonegap应用程序中iphone上丢失的硬件后退按钮?【英文标题】:How to deal with missing hw back button on iphone in a phonegap app? 【发布时间】:2013-09-12 08:21:29 【问题描述】:我有一个 web 应用程序,托管在 phonegap 应用程序中(我为此使用 phonegap 构建)
设置很简单,但在这种情况下并不重要。无论如何,我会告诉你,因为有时魔鬼在细节中,对吧? :)
详情
phonegap 应用程序实际上只是一个 html 的最小设置。该 html 实际上用作启动屏幕 - HTML 的背景有一个图像。有一个元刷新标签,设置为将页面重定向到外部 url。从现在开始,我将其命名为 myurl.com。
myurl.com 上的网站是使用 jquery mobile 和 angularjs 构建的。我使用浮动的适配器来处理两个框架都希望在页面加载时操纵 dom 的问题。这是应用真正托管的域,也是整个应用运行的地方。
设置
一个页面有一个指向外部页面的链接。该页面有一个 javascript 引导加载,显示一些花哨的东西。如果您单击该链接 - 您的应用程序会将您带到该页面。这太棒了!它实际上适用于所有设备。在我的桌面浏览器和安卓应用程序上,我只需点击硬件(或浏览器)返回按钮,我就会返回到 myurl.com 上的应用程序。另一方面,Iphone 没有后退按钮 :(
我的第一次尝试是创建一个包含后退按钮/链接和 iframe 来托管精美页面的登录页面。即使我在控制台中遇到一些异常/错误,它也可以在桌面和安卓上运行。它不会在 iphone 上加载 - 我只能怀疑安全问题。有人告诉我,我试图用 iframe 做的事情是行不通的,我认为这是真的。
我该如何处理?我实际上尝试过这样的 InAppBrowser:
var ref = window.open(url, 'random_string', 'location=yes');
我检查了我的 config.xml 有这个:
<preference name="stay-in-webview" value="false" />
我也将此添加到我的页面:
<script stype="text/javascript" src="phonegap.js"></script>
省略 phonegap.js 文件,因为 phonegap 构建承诺包含正确的版本。
它仍然在同一个视图/应用程序中打开页面而无法返回 - 我得到的 excat 结果与以正常方式打开链接相同。
帮助我在此处插入绝地名称,你是我唯一的希望!
编辑: 我发现了问题。 phonegap.js 文件会自动部署在设备上,因此只有第一个 index.html(带有元刷新)实际链接正确。 myurl.com 上的页面未链接到该文件。我将 phonegap.js 放在 myurl.com 上,它正在工作。唯一的问题是,每个设备的 phonegap.js 都不同 - 这意味着只有我从中选择 phonegap.js 的设备在工作 - 其他设备坏了!
我可以在哪里链接到本机应用程序文件?我试过 file:///path/phonegap.js 但它不起作用。我可以看到/猜测路径,每个设备都不同,但对于 iphone Payloadname.app\www - 它不会从那里加载...我也试过了
http://localhost/phonegap.js
但这也不起作用。
有什么想法吗?
最终编辑
我决定回到绘图板上并将所有 html 文件放在设备上。我将在我的 ajax api 上实现 JSONP,这样我就可以让 API 在 myurl.com 上运行,并且仍然可以通过手机访问它。这可能也是制作 phonegap 应用程序的预期方式 - 我只是更喜欢另一种方法......
【问题讨论】:
【参考方案1】:实际上,前几天我刚刚回答了一个这样的问题。你可以找到它here。简而言之,见下文:
-
确保在您想要使用 inappbrowser 的每个页面中都有
<script src="phonegap.js"></script>
您不需要在 config.xml 中包含插件标记。我很确定他们在 2.5 左右将 inappbrowser 包含在核心构建功能中。
要在 inappbrowser 中打开链接,请使用以下 javascript:
function openURL(urlString)
myURL = encodeURI(urlString);
window.open(myURL, '_blank');
这将在 inappbrowser 中打开传递的 URL。如果您将window.open(myURL, '_blank');
更改为window.open(myURL, '_system');
,它将在系统浏览器中打开传递的URL。
最后,您的项目点击如下所示:
<a href='#' onclick='openURL("http://www.urlyouwant")/>
另外,根据您使用的 phonegap 版本,stayinwebview 会折旧。
***根据您的编辑:不要将 phonegap.js 放在您的项目目录中。当您将其上传到构建时,它将包含在您的项目中。
【讨论】:
谢谢,但我认为我确实需要部署 phonegap.js,因为它不会部署到 myurl.com 站点上,因为 phonegap 对此一无所知,除了 index.html 上的链接, myurl.com 需要引用它,但不知道在哪里寻找它。 phonegap.js 没有 CDN 对吧?以上是关于如何处理phonegap应用程序中iphone上丢失的硬件后退按钮?的主要内容,如果未能解决你的问题,请参考以下文章
如何处理 iPhone 应用程序中的 NSError? [复制]