jQueryMobile + PhoneGap + iOS 11:阻止尝试使用history.replaceState()更改会话历史记录URL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQueryMobile + PhoneGap + iOS 11:阻止尝试使用history.replaceState()更改会话历史记录URL相关的知识,希望对你有一定的参考价值。

从iPhone ios 11.3开始,我的应用程序因以下错误而中断:

SecurityError: Blocked attempt to use history.replaceState() to change session history URL from file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/index.html#/?phonegap=true to https://myplaceonline.com/?phonegap=true. Protocols, domains, ports, usernames, and passwords must match.
url:
file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js
line #: 3 (31672)

我一直这样做的方式(这继续适用于android):

  1. PhoneGap app在Qazxswpoi加载JQM。
  2. 附加了一个JQM index.html page事件处理程序,它注册一个最终调用mobileinitpageloaded事件处理程序。
  3. loadHomepage将loadHomepage标签的$.mobile.path.documentBasehref属性设置到我的远程服务器(base)并调用https://myplaceonline.com/来加载远程主页。
  4. 这最终驱使JQM调用replaceState,它因安全错误而失败:$.mobile.pageContainer.pagecontainer("change", "/", { allowSamePageTransition: true, transition: 'none', reloadPage: true, changeHash: true });

上述所有目的的目的是让我不要离开 replaceState@[native code] squash@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:3:31672 go@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:322 navigate@file:///var/containers/Bundle/Application/E73A3E4A-D961-4943-BAA3-7845E755F6A0/myplaceonline.app/www/js/jquery.mobile-1.4.5.min.js:4:1598 ,因为如果我这样做,我将无法通过PhoneGap访问所有本机手机JS API。这适用于旧版本的iOS,并继续在Android上运行。

有关替代方法的任何想法可以在新版本的iOS上实现更严格的安全性吗?或者,我看到像file:///这样的问题提出了一种禁用历史记录的方法,我想知道这是否是另一种解决方法以及我会失去什么?

答案

将以下代码添加到https://github.com/jquery/jquery-mobile/issues/5465处理程序可以解决此问题:

mobileinit

以上是关于jQueryMobile + PhoneGap + iOS 11:阻止尝试使用history.replaceState()更改会话历史记录URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 JqueryMobile 在 phoneGap 中启动应用程序时调用服务器

在 Android / PhoneGap 上运行的 jQueryMobile 拒绝 .load / .ajax

jQueryMobile + PhoneGap + iOS 11:阻止尝试使用history.replaceState()更改会话历史记录URL

使用手势的 iOS Phonegap 滑动检测

在“PhoneGap + jQuery Mobile”应用程序中正确注册事件

Phonegap App:从屏幕边缘滑动