java - 如何在 WebView 中捕获链接页面加载?
问题描述
我想在 Android 中加载网页时应用自定义 JS 代码WebView
。我有一个WebView
自定义的WebViewClient
,覆盖onPageFinished()
的,我在那里使用 JS 代码
webView.loadUrl("javascript:(function() { ... });");
效果很好。但是,有些页面在单击链接时会“动态”加载页面(使用 AJAX?),并且onPageFinished()
没有调用,因此没有应用我们的自定义 JS 代码。
此类页面的一个示例是https://reddit.com/r/Nature(您需要使用 Chrome 开发人员工具并设置移动视图),其中线程在单击时动态加载。
如何检测这些页面加载?
解决方案
您必须覆盖该方法shouldOverrideUrlLoading
:
当即将在当前 WebView 中加载 URL 时,让主机应用程序有机会进行控制。如果未提供 WebViewClient,默认情况下 WebView 将要求 Activity Manager 为 URL 选择正确的处理程序。如果提供了 WebViewClient,返回 true 会导致当前 WebView 中止加载 URL,而返回 false 会导致 WebView 像往常一样继续加载 URL。
它应该被覆盖两次,如果你想WebView
在新旧版本的 Android 上工作,如下所示:
WebViewClient webViewClient = new WebViewClient()
{
@SuppressWarnings("deprecation") @Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@TargetApi(Build.VERSION_CODES.N) @Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
{
view.loadUrl(request.getUrl().toString());
return true;
}
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
Toast.makeText(getApplicationContext(), "Page loaded!", Toast.LENGTH_SHORT).show();
}
};
推荐阅读
- ios - 本地化自定义 SiriKit 意图
- sql - SQL将数据插入临时表,拆分列
- javascript - 在导出之前使用额外的中间件动态包装命名导出
- html - 用于将文本字符串转换为指定超链接的 HTML 脚本
- php - 如何将数组形式的数据放入更新查询中并从更新查询中删除数组到字符串的转换
- javascript - node.js 检查将新文件复制到磁盘是否已完成
- vb.net - 与动态生成的控件交互时运行的函数
- crystal-reports - SAP Crystal Report 无法编辑命令
- angular - 将 ng-select 与 formControlName 一起使用时不显示占位符
- sql - 我们可以为索引和主键使用相同的列吗 - Informix DB