问题标签 [wkwebview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
939 浏览

ios - Xamarin 统一 IOS WKWebView 崩溃

我在使用带有新 Xamarin Unified iOS API 的 WKWebView 时遇到了一些问题,它在加载时崩溃并出现 EXC_BAD_ACCESS (SIGABRT) - KERN_INVALID_ADDRESS 异常(必须为此挖掘电话日志,Visual Studio 中没有任何显示。

我希望有人对此有一些经验。下面似乎是有问题的代码,它在经典 API 中运行良好(尽管由于 API 差异而进行了微小的更改)。如果我注释掉 3 WKWebView 行,以及将其添加到控制器的行,应用程序就会运行。注意:Window、Controller、WKWebView都是appdelegate类的参数。

这是崩溃报告的相关部分(崩溃线程堆栈跟踪)

0 投票
3 回答
11973 浏览

ios - 加快 loadHTMLString-d 内容的 WKWebView 渲染的策略?

我一直在尝试在 UINavigationController 中堆叠 WKWebViews 作为制作比 PhoneGap 更原生的混合应用程序的方法。它广泛适用 - 当 WKWebView 命中链接时,我会连接到 decisionPolicyForNavigationAction,并使用它想要的链接推送一个新的 ViewController。

但是页面加载很慢。我已经做了我能想到的一切来加速它——它使用 loadHTMLString 而不是请求来确保一切都是本地的——我什至尝试去掉 CSS 和 JS 以查看是否可以加快速度,但没有骰子。一个短的、仅 HTML 的、本地存储的页面仍然需要至少 500 毫秒才能出现在空的 WKWebView 中。我可以从调试中看出延迟不是从磁盘读取 HTML,而是 loadHTMLString() 和 didFinishNavigation() 之间的时间。

有没有人有任何解决这个问题的策略?我会尝试预加载视图,只是我不知道用户要点击哪个链接,所以我不知道要预加载什么。

0 投票
1 回答
6940 浏览

swift - ios8手势识别器不能在WKWebView上使用swift

我正在尝试在 WKWebView 上实现长按手势识别器,如下所示:

我没有收到错误,但我似乎无法让它触发 onLongPress 功能。

0 投票
2 回答
1528 浏览

wkwebview - How can I restore a WKWebView to the state it was before the app closed?

I run into a dead end. I just can't figure out a way for restoring a WKWebView after the user has closed the app. All the web pages he visited must be there when he re-opens it.

Any suggestions?

0 投票
7 回答
72728 浏览

javascript - WKWebView 评估 JavaScript 返回值

我需要更改一个函数来评估 JavaScript 从 UIWebView 到 WKWebView。我需要在这个函数中返回评估结果。

现在,我打电话给:

但我需要得到类似返回值的结果,比如 in UIWebView。你能提出一个解决方案吗?

0 投票
2 回答
2292 浏览

swift - WKWebview 不在 Swift 中加载本地图像

我正在使用 WKWebview 来显示我的本地 htm 文件。一切都很好,但是当我将本地图片添加到我的 htm 文件时,图片似乎没有。许多 stackoverflow 用户有类似的问题,但没有明确的答案。这是我的代码;

我希望你能帮助我。我在等你的答案。谢谢你。

0 投票
1 回答
2912 浏览

javascript - 如何在 WKWebView 上启用 Safari 网络检查器?

我有一个混合应用程序,它使用 WKWebView 来显示大量文本,而这反过来又广泛使用 Javascript 来进行文本分析。我们目前面临性能问题,我想以与使用 UIWebView 的应用程序的先前版本相同的方式使用 Safari Inspector。问题是,我在 Safari 中启用了开发人员菜单,但我无法在我的 iPad 应用程序上绑定网络检查器。

鉴于这曾经与 UIWebView 一起使用,我是否缺少新的东西?还有其他我需要摆弄的设置吗?

0 投票
4 回答
2471 浏览

ios - 为什么我无法将 WKWebView 保存到 [NSUserDefaults standardUserDefaults]?

上面的代码用于保存 WKWebView 对象,但出现编译器错误:

2014-11-08 14:58:52.561 恢复[2431:482391] 属性列表对格式无效:200(属性列表不能包含“CFType”类型的对象)2014-11-08 14:58:52.564 恢复[2431:482391 ] 尝试设置非属性列表对象 > 作为关键 webView 的 NSUserDefaults/CFPreferences 值 2014-11-08 14:58:52.566 恢复 [2431:482391] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因: '尝试插入非属性列表对象> for key webView' *First throw call stack: (0x2c491c1f 0x39c78c8b 0x2c491b65 0x2c4cbe51 0x2c436599 0x2c4358d7 0x2c4cc0d1 0x2c4cb769 0x2c4ce95b 0x2c4ce875 0x2d0eab69 0x66bdf 0x2f981c2b 0x2f981bd1 0x2f96c863 0x2f98163d 0x2f981317 0x2f97abe1 0x2f9513dd 0x2fbc4c29 0x2f94fe39 0x2c458377 0x2c457787 0x2c455ded 0x2c3a4211 0x2c3a4023 0x3379d0a9 0x2f9b01d1 0x66ead 0x3a1f8aaf) libc++abi.dylib: terminating with uncaught exception of type异常

如何保存 WKWebView 并恢复其历史记录?

编辑:

8个月过去了,这个问题还没有解决...

编辑2:

我正在制作一个网络浏览器,当用户重新启动应用程序时,网络视图(选项卡)要恢复,这样他就可以按下后退按钮并返回,这一点至关重要。

如果我将以前的 URL 保存在一个简单的列表中,我无法在应用程序重新启动时将它们放回 Web 视图中。我只能加载第一页。因此,用户不能按返回,因为没有要返回的页面。如果它像保存 URL 列表一样简单,我就不会开始赏金了。因为,Web 浏览器是一个非常复杂的应用程序,我已经非常接近 webViews 的基础知识,我什至提交了 3 个错误,其中只有 2 个得到了解决。包括臭名昭著的截图错误

standardUserDefaults 方法确实适用于 UIWebView,但 Apple 声明所有开发人员都应在 iOS 7 发布后使用 WKWebView。我预计 UIWebView 将在不久的将来被弃用。

0 投票
7 回答
7346 浏览

ios - 我无法捕获 WKWebView 的屏幕截图

我正在尝试捕获 WKWebView 的屏幕截图,但我的方法无法正常工作,它返回纯色,就好像图层树为空一样,而它似乎适用于其他视图。

0 投票
5 回答
21282 浏览

swift - JavaScript 同步原生通信到 WKWebView

是否可以使用 WKWebView 在 JavaScript 和 Swift/Obj-C 本机代码之间进行同步通信?

这些是我尝试过但失败的方法。

方法 1:使用脚本处理程序

WKWebView接收JS消息的新方式是使用userContentController:didReceiveScriptMessage:从JS调用的委托方法,window.webkit.messageHandlers.myMsgHandler.postMessage('What's the meaning of life, native code?') 这种方法的问题是在执行原生委托方法的过程中,JS执行没有被阻塞,所以我们不能返回一个值立即调用webView.evaluateJavaScript("something = 42", completionHandler: nil).

示例(JavaScript)

示例(斯威夫特)

方法 2:使用自定义 URL 方案

在 JS 中,重定向 usingwindow.location = "js://webView?hello=world"调用本地 WKNavigationDelegate方法,其中可以提取 URL 查询参数。但是,与 UIWebView 不同的是,委托方法不会阻止 JS 执行,因此立即调用evaluateJavaScript将值传回 JS 在这里也不起作用。

示例(JavaScript)

示例(斯威夫特)

方法 3:使用自定义 URL 方案和 IFRAME

这种方法仅在window.location分配方式上有所不同。不是直接分配它,而是使用src空的属性iframe

示例(JavaScript)

尽管如此,这也不是一个解决方案,它调用与方法 2 相同的本机方法,它不是同步的。

附录:如何使用旧的 UIWebView 实现这一点

示例(JavaScript)

示例(斯威夫特)