在 iOS 8.4.1 上使用 Cordova 无法打开链接(和点击)

Posted

技术标签:

【中文标题】在 iOS 8.4.1 上使用 Cordova 无法打开链接(和点击)【英文标题】:Links (and clicks) fail to open with Cordova on iOS 8.4.1 【发布时间】:2015-11-09 03:39:33 【问题描述】:

最新的 ios 版本 (8.4.1) 似乎破坏了我们的 ngCordova 应用程序。

我们的链接通常不会打开,无论是直接通过 href、ng-click 还是 ng-href 访问。有些会在反复点击后打开,并且hrefs有一个弹出菜单,如果我们点击并按住它们一段时间,我们可以选择“打开”、“复制”或“取消”。

问题不区分按钮或标签。一些 a 标签似乎工作得很好。

我们使用的是旧版本的 cordova 和 ngcordova,但更新它们并没有解决这个问题。

我也尝试过禁用用户选择,但这并没有解决问题。

这个问题只发生在设备上,不在模拟器上。

我们为侧边菜单使用可切换的 angular-mobile-ui 指令,当点击侧边菜单中的链接时触发切换事件,但链接不会重定向。

【问题讨论】:

【参考方案1】:

您可以尝试重新安装您的inAppBrowser 插件

【讨论】:

【参考方案2】:

我认为我遇到了同样的问题,尽管我认为这与点击事件有关,而不是特别是链接。我的应用没有使用 Angular,只有 jQuery,一些 jQuery 插件..

过境 hammer.js 快速点击 计算器(基思伍德) base64 插件

..还有一些PhoneGap/Cordova插件..

cc.fovea.cordova.purchase 3.10.1“购买” cordova-plugin-console 1.0.0“控制台” cordova-plugin-dialogs 1.0.0“通知” cordova-plugin-inappbrowser 1.0.0“InAppBrowser” cordova-plugin-whitelist 1.0.1-dev "白名单" de.appplant.cordova.plugin.email-composer 0.8.2“EmailComposer” hu.dpal.phonegap.plugins.PinDialog 0.1.3“PinDialog” org.apache.cordova.splashscreen 1.0.0“启动画面” uk.co.ilee.touchid 0.2.0“触控 ID”

我的应用程序上有很多按钮,并且通过这次 iOS 更新 (8.4.1),我发现其中一些有效,而另一些无效。

例如这是停止工作的按钮之一的标记:

<div class="button theme-bg" id="add-budget"><span>Add Budget</span></div>

这是相关的 jQuery:

$('#add-budget').on('click', function (e) 
    // do stuff
);

从 iOS 7.0 到 8.4 都可以正常工作。它只在 8.4.1 中断。

最后,我发现在这个按钮上添加以下 CSS 规则解决了这个问题:

width: 100%;
float: left;
overflow: hidden;

我完全不知道为什么会这样。如果有人能解释原因,那就太好了。我只是通过查看 确实 仍然有效的按钮的 CSS 规则并将它们应用于损坏的按钮来解决这个问题。

无论如何,我希望它也适用于其他人。这是 8.4.1 的一个可怕问题 - 特别是因为这个更新应该只影响 Apple Music!我不得不从所有 App Store 中删除我的应用!

这是应用于我的(正在工作的)按钮的完整规则列表:

.button 
    height: 50px;
    line-height: 50px;
    text-align: center;
    font-size: 14px;
    font-weight: bold;
    color: #fff;
    display: block;
    -webkit-box-sizing: border-box;
    cursor: pointer;
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: -0.07em;
    -webkit-box-shadow: 0px 8px 15px rgba(50, 50, 50, 0.1);
    position: relative;

    /* 3 new rules added to fix the buttons: */
    width: 100%;
    float: left;
    overflow: hidden;

.theme-bg 
    background: #F88319;
    -webkit-transition: background 0.7s;

【讨论】:

我最终通过使用 fastclick 库 github.com/ftlabs/fastclick 解决了它 我的项目已经在使用 fastclick,但问题仍然存在。我这样称呼它:FastClick.attach(document.body);【参考方案3】:

我在使用 cordova 3.5 版的 ios 项目构建时遇到了同样的问题 当我将 cordova 更新到最新版本 (5.1.1) 并重建项目时,问题得到了解决

我不确定这是根本原因,但它对我来说很好

P/s:我的项目使用 angularjs 和 cordova

【讨论】:

【参考方案4】:

我也有同样的问题。在此处查看 Apple 的安全更新日志https://support.apple.com/en-us/HT205030

影响:恶意网站可以使点击事件产生合成 点击另一个页面 描述:如何合成存在问题 点击事件是由点击事件生成的,这些事件可能导致点击目标 其他页面。该问题已通过受限点击得到解决 传播。

我认为问题源于这种变化。

您可以将 touchstart 事件添加到您的点击事件中。这暂时解决了我的问题,直到我找到更好的解决方案。

$('button').on('click touchstart', function()
    // Click event
);

【讨论】:

我们发现了同样的问题——fastclick 为我们解决了问题。【参考方案5】:

您使用的是 FastClick 库吗?您可以尝试更新到最新版本吗?

我们在 iOS 8.4.1 和 FastClick 0.6.7 版本中遇到了同样的问题。当我们更新到最新版本的 FastClick 库时,问题就解决了。不知道它是如何以及为什么起作用的,但它对我们有用!

【讨论】:

【参考方案6】:

我能够通过安装 fastclick 库来解决问题。 FastClick

【讨论】:

也影响了我们的一款使用 FastClick 0.6.11 的应用程序,使用最新版本的 FastClick 解决了【参考方案7】:

使用最新版本的 FastClick 对我有用。

【讨论】:

【参考方案8】:

另一种方法是像这样设置 css 属性(它适用于我):

button:active  opacity: 1 !important; 

一些我无法理解的非常愚蠢的东西,但我认为它与 Apple 相关,发布于: https://support.apple.com/en-us/HT205030

“影响:恶意网站可以使点击事件产生合成 点击另一个页面 描述:如何合成存在问题 点击事件是由点击事件生成的,这些事件可能导致点击目标 其他页面。该问题已通过受限点击得到解决 传播。”

所以我想如果处于活动状态的按钮设置为低于 1 的不透明度,Apple 应该认为这是合成点击。

【讨论】:

+1 这个修复对我有用。我更新了 fastclick 库并没有发生任何事情,但是将按钮的不透明度设置为 1.0 有效【参考方案9】:

我可以亲自担保 Fastlink 在我们运行在 Backbone/Marionette 上的应用程序上解决了这个问题。我们实现了它,我们的 javascript 点击事件再次按预期工作,不需要从点击更改为任何触摸方法。我知道这也会影响 CSS 下拉菜单(我们的应用程序没有)。任何人都可以保证上面提到的 CSS hack 可以解决问题吗?

【讨论】:

【参考方案10】:

我尝试了上述所有解决方案: - 不透明度:1; = 无影响 - FastClick = 比不工作更糟糕(激活隐藏在 CSS 子菜单下的链接) - 我用 touchStart 事件创建了一个不稳定的解决方法,但这不是一个像样的永久解决方案。我还将测试上面的简短 touchStart 解决方案,但要保持网站超轻量级,所以我什至不使用 JQuery,将不得不重新编写它。 - Fastlink = 我不知道从哪里得到这个 JS

我的菜单是一个简单的纯 CSS 子菜单 .. 根本没有 Javascript。直到现在,因为苹果显然需要它! (并且关闭 JS 的人无法再浏览该网站。)

但是我仍然没有找到一个好的解决方案,即使使用 JS 来解决 Apple 制造的这个全球网站破坏问题!

有关此主题的更多讨论,请参见 Apple 社区的此帖子:https://discussions.apple.com/message/28790737

【讨论】:

试过这个:a:active opacity: 1 !important; 这种工作,但特定于pureCSSmenu: var lastTouch;函数 touchStart(event) var currentElement = event.target; if(currentElement.parentElement.nodeName == 'LI' && currentElement.className != 'pureCssMenui0') location.href=currentElement.href; if(currentElement.tagName == 'A' && currentElement.className == 'pureCssMenui0') event.preventDefault(); if(currentElement.href != lastTouch) lastTouch = currentElement.href; 其他 location.href=currentElement.href; this.addEventListener("touchstart", touchStart, false);【参考方案11】:

这对我有用:

a, button  opacity:1 !important; 

THX arzanardi

【讨论】:

【参考方案12】:

我在使用 Cordava 4.1.2 和 iOS 8.4.1 时遇到了同样的问题,我解决了更新 FastClick 的问题

【讨论】:

【参考方案13】:

我使用 css 解决了同样的问题。我在 css 下面添加了它,它对我有用。

z-index:10000000;

【讨论】:

以上是关于在 iOS 8.4.1 上使用 Cordova 无法打开链接(和点击)的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS 的 Phonegap/Cordova 日历插件无响应

插件返回后 Cordova 视图无响应

如何使用 Ionic / Cordova 在 iOS 上启用多任务处理?

Cordova Platform iOS 4.0.1 白屏

Google地图自动填充功能在Cordova iOS上使用WKWebView失败

ionic Cordova 使用媒体插件在 IOS 上录制音频失败