如何处理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 的每个页面中都有 &lt;script src="phonegap.js"&gt;&lt;/script&gt; 您不需要在 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上丢失的硬件后退按钮?的主要内容,如果未能解决你的问题,请参考以下文章

PhoneGap 应用程序通常如何处理用户帐户?

如何处理iphone中的关键事件

如何处理 iPhone 应用程序中的 NSError? [复制]

如何处理 iPhone 应用程序中的 try catch? [复制]

如何处理 iPhone 5 视网膜显示检查?

你如何处理 UI 自动化 iPhone 应用程序测试中的 UIPickerView?