ios - Cordova InAppBrowser 打开但页面加载到主页面

标签 ios cordova cordova-3 inappbrowser

我们有 Sencha Touch 应用程序。它显示各种内容,包括带有应用程序外部链接的页面(到不同的 Web 服务器)。我们所做的是添加了一个 inappbrowser 插件来处理链接。

this.getItemsDetail().element.on('tap', function(event, target) {
        event.preventDefault();
        window.open(target.href, '_blank');
        console.log('tap');
    }, this, {delegate : 'a'});

这有效 - “点击”被记录下来。子浏览器打开。问题是有时事件“失败”,错过了 inappbrowser 并加载到主 webview 中。我设法在 inappbrowser 类中切换调试。日志在底部。

问题是这个issue不一致。有时很难重现。你必须尝试点击然后它就会发生。我假设核心是

2013-11-18 14:11:18.362 CDVWebViewDelegate: Navigation started when state=1
2013-11-18 14:11:18.363 Failed to load webpage with error: CDVWebViewDelegate: Navigation started when state=1

我不知道消息的确切含义。从代码看来“状态 1”是“STATE_WAITING_FOR_LOAD_START”

typedef enum {
    STATE_IDLE,
    STATE_WAITING_FOR_LOAD_START,
    STATE_WAITING_FOR_LOAD_FINISH,
    STATE_IOS5_POLLING_FOR_LOAD_START,
    STATE_IOS5_POLLING_FOR_LOAD_FINISH,
    STATE_CANCELLED
} State;

但仍然 - 我不确定我做错了什么以及如何以“正确”状态加载网页。

16.285 tap
16.300 webView shouldLoad=1 (before) state=0 loadCount=-1 URL=http://spokendata.com/
16.300 webView shouldLoad=1 (after) isTopLevelNavigation=1 state=1 loadCount=0
16.301 webView didStartLoad (before). state=1 loadCount=0
16.301 webView didStartLoad (after). state=2 loadCount=1 fireCallback=1
16.465 webView didFinishLoad (before). state=2 loadCount=1
16.466 webView didFinishLoad (after). state=0 loadCount=0 fireCallback=1
18.362 webView shouldLoad=1 (before) state=1 loadCount=0 URL=http://spokendata.com/
18.362 CDVWebViewDelegate: Navigation started when state=1
18.363 Failed to load webpage with error: CDVWebViewDelegate: Navigation started when state=1
18.364 webView shouldLoad=1 (after) isTopLevelNavigation=1 state=1 loadCount=0
18.438 webView didStartLoad (before). state=1 loadCount=0
18.439 webView didStartLoad (after). state=2 loadCount=1 fireCallback=1
18.439 Resetting plugins due to page load.
18.553 webView didFinishLoad (before). state=2 loadCount=1
18.553 webView didFinishLoad (after). state=0 loadCount=0 fireCallback=1
18.553 Finished load of: http://spokendata.com/
18.995 webView shouldLoad=1 (before) state=0 loadCount=0 URL=http://spokendata.com/demo
18.996 webView shouldLoad=1 (after) isTopLevelNavigation=1 state=1 loadCount=0
18.997 webView didStartLoad (before). state=1 loadCount=0
18.997 webView didStartLoad (after). state=2 loadCount=1 fireCallback=1
18.997 Resetting plugins due to page load.
19.152 webView didFinishLoad (before). state=2 loadCount=1
19.152 webView didFinishLoad (after). state=0 loadCount=0 fireCallback=1
19.153 Finished load of: http://spokendata.com/demo

我们正在使用 Cordova 3.1.0-0.1.0

更新: 它偶尔会发生——有时有效,有时无效。它发生在各种页面(大页面和小页面)上。我创建了一个应用程序 ( https://github.com/tomasfejfar/cordova-bug-01 ),我可以在其中重现问题。您只需尝试点击足够长的“SEZNAM”链接以显示“seznam.cz”而不是“google.com”...

最佳答案

我会将其添加为答案,以便将此问题列为已回答和已解决。

我们实际上将问题回溯到 Sencha Touch 事件处理程序——它们非常具体,因为它们需要处理实际 dom 元素的创建和删除(div 是定期创建和删除的)。这些事件附加到更高级别的“元素”,如 Ext.Container。这是 Ext 对 div 的表示,它是在使用时创建的,以后也可以删除,只是在重新创建一段时间后显示(作为不同的 DOM 元素)。这将使您无法绑定(bind)任何 DOM 事件。所以 Sencha 在内部处理这个。内部句柄以某种方式忽略了 event.preventDefault(),这使得链接在 webview 和 childbrowser 中加载(所以,是的,你非常正确,Uncharted Space)。最简单的解决方案仍然是使用“non-href hrefs”(data-href)。但如果这不是您的选择,则可以使用内部 Sencha 事件系统来解决。

关于ios - Cordova InAppBrowser 打开但页面加载到主页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049936/

相关文章:

ios - 为什么我的 TextView 充满了不需要的空间?代码中没有额外的行。截图

ios - 重新加载 View swift 3 后 ScrollView 不起作用

android - Ionic Cordova Web 应用程序 cookie 未存储在 Android 或 iOS 上

ios - Phonegap 和 Apache cordova 之间的不明确区别

ios - 使用Cordova平台添加ios时出现错误

Cordova 4.0.0项目添加平台问题?

ios - 使用没有代码设计的 xcodebuild 构建 iOS 应用程序

iphone - 对 NSString 的 NSArray 进行排序

ios - 使用无法在 azure 通知中心工作的标签注册推送通知

ios - camera.getPicture 在选择图库中的 cordova ios 中滞后了太多时间