安卓中 WebView 如何获取到网页中 frame 的内容
可以使用 WebView 的 loadUrl 方法加载网页,并在 onPageFinished 方法中使用 JavaScriptInterface 获取 frame 中的内容。
具体步骤如下:
-
创建一个类,继承自 WebViewClient,并重写 onPageFinished 方法。
-
在 onPageFinished 方法中,使用 JavaScriptInterface 调用网页中的 JavaScript 函数,获取 frame 中的内容。
-
在 JavaScript 函数中,使用 window.parent.postMessage 方法将 frame 中的内容发送到父页面。
-
在父页面中,使用 window.addEventListener 方法监听 message 事件,并在事件处理程序中获取到 frame 中的内容。
示例代码如下:
public class MyWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:window.android.getContent(document.getElementsByTagName('iframe')[0].contentWindow.document.documentElement.outerHTML);");
}
}
public class MyJavaScriptInterface {
private Context mContext;
public MyJavaScriptInterface(Context context) {
mContext = context;
}
@JavascriptInterface
public void getContent(String content) {
// 将 frame 中的内容发送到父页面
((Activity) mContext).runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:window.parent.postMessage('" + content + "', '*');");
}
});
}
}
// 在 WebView 中设置 JavaScriptInterface
webView.addJavascriptInterface(new MyJavaScriptInterface(this), "android");
// 在父页面中监听 message 事件
window.addEventListener('message', function(event) {
var content = event.data;
// 处理 frame 中的内容
});
注意:在 Android 4.2 及以上版本中,需要使用 @JavascriptInterface 注解声明 JavaScriptInterface 方法,才能在 JavaScript 中访问。
原文地址: https://www.cveoy.top/t/topic/6TR 著作权归作者所有。请勿转载和采集!