有没有办法确定 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

WKWebView - 设备旋转时内容不旋转

如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡

有没有办法确定 OpenGL 纹理或 QOpenGLTexture 的图形内存占用?

WKWebView 可水平滚动

如何确定 WKWebView 的内容大小?