有没有办法确定 WKWebView 或 SFSafariViewController 视图中某个点的元素是啥?
Posted
技术标签:
【中文标题】有没有办法确定 WKWebView 或 SFSafariViewController 视图中某个点的元素是啥?【英文标题】:Is there a way to determined what element is at a point in a WKWebView or SFSafariViewController view?有没有办法确定 WKWebView 或 SFSafariViewController 视图中某个点的元素是什么? 【发布时间】:2018-09-19 18:01:12 【问题描述】:我想知道 Web 视图中某个特定点的“下方”是什么元素。例如,在下面的屏幕截图中,我想知道点 550x、275y 是什么元素。我希望得到结果:
<img alt="Typhoon Mangkhut approaching the Philippines on September 14" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/30/Mangkhut_2018-09-14_0750Z.jpg/140px-Mangkhut_2018-09-14_0750Z.jpg" width="140" height="111" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/30/Mangkhut_2018-09-14_0750Z.jpg/210px-Mangkhut_2018-09-14_0750Z.jpg 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/30/Mangkhut_2018-09-14_0750Z.jpg/280px-Mangkhut_2018-09-14_0750Z.jpg 2x" data-file-width="1219" data-file-height="963">
【问题讨论】:
【参考方案1】:如果 webview 支持它,您可以让 javascript 确定其中的内容,并将其报告给 webview。抱歉,我还没有运行此代码,目前我没有办法对其进行测试。
如果您无法将 javascript 添加到页面,则必须在 WKWebView .evaluateJavaScript
中完成所有操作
找到元素值:
var elem = document.elementFromPoint(550, 275);
然后通过创建自定义方案请求告诉您的 webview。你可以这样做:
var iframe = document.createElement("IFRAME");
iframe.setAttribute("src", "customScheme://" + JSON.stringify(elem);
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
在 webview 委托中拦截它。
public func webView(_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
let url = navigationAction.request.url
if(url.range(of:"customScheme://") != nil)
// this is your reported info
return true
这种方法只会告诉您与网络浏览器坐标相关的元素,而不是它在设备屏幕上的位置。如果你想通过设备位置来实现,你必须翻译它并通过调用设备上的一些 javascript 将坐标传递给 webview。
【讨论】:
以上是关于有没有办法确定 WKWebView 或 SFSafariViewController 视图中某个点的元素是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 WKWebView 正在关闭,来自 javascript
如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡