在Android webview中禁用页面转发
我有一个显示广告(不是我的广告)的网络视图,问题是当用户点击“x”按钮退出广告时,广告仍然会将他们导向一个站点。我想知道的是,既然我不能控制广告,我可以在webview中禁用页面定向/转发吗?这意味着,即使用户单击我的webview中的链接,也不会发生任何事情。您正在寻找一种方法 你正在寻找一种方法在Android webview中禁用页面转发,android,redirect,webview,Android,Redirect,Webview,我有一个显示广告(不是我的广告)的网络视图,问题是当用户点击“x”按钮退出广告时,广告仍然会将他们导向一个站点。我想知道的是,既然我不能控制广告,我可以在webview中禁用页面定向/转发吗?这意味着,即使用户单击我的webview中的链接,也不会发生任何事情。您正在寻找一种方法 你正在寻找一种方法 我尝试使用shouldOverrideUrlLoading,但没有成功。在加载html时,似乎只调用一次此方法。之后,单击一个链接,但不再调用该方法 我还制作了一个嵌入Youtube播放器的网络视图
我尝试使用shouldOverrideUrlLoading,但没有成功。在加载html时,似乎只调用一次此方法。之后,单击一个链接,但不再调用该方法 我还制作了一个嵌入Youtube播放器的网络视图。我更喜欢在浏览器中打开广告,而不是从WebView转发广告重定向。所以我重写了onLoadResource方法:
@覆盖
public void onLoadResource(最终WebView视图,最终字符串url){
if(url.indexOf(“谷歌服务”)>-1){
view.getSettings().setJavaScriptEnabled(false);
view.stopLoading();
view.postdayed(
新的Runnable(){
@凌驾
公开募捐{
Uri=Uri.parse(url);
意图i=新意图(Intent.ACTION\u视图,uri);
i、 setClassName(“com.android.browser”、“com.android.browser.BrowserActivity”);
星触觉(i);
}
}
,100
);
}
}
我尝试使用shouldOverrideUrlLoading,但没有成功。在加载html时,似乎只调用一次此方法。之后,单击一个链接,但不再调用该方法
我还制作了一个嵌入Youtube播放器的网络视图。我更喜欢在浏览器中打开广告,而不是从WebView转发广告重定向。所以我重写了onLoadResource方法:
@覆盖
public void onLoadResource(最终WebView视图,最终字符串url){
if(url.indexOf(“谷歌服务”)>-1){
view.getSettings().setJavaScriptEnabled(false);
view.stopLoading();
view.postdayed(
新的Runnable(){
@凌驾
公开募捐{
Uri=Uri.parse(url);
意图i=新意图(Intent.ACTION\u视图,uri);
i、 setClassName(“com.android.browser”、“com.android.browser.BrowserActivity”);
星触觉(i);
}
}
,100
);
}
}
您可以构建未检测到的webview构建id adblocker
我知道现在回答这个问题已经太迟了,但是,为了其他有同样问题的人
好吧,如果你希望阻止广告加载,并为用户提供流畅的体验,我相信你可以构建webview build id adblocker,因为我已经在5月份的应用程序中实现了它
想法
就是要有一个所有可能的广告服务域名的黑名单,然后当webview加载资源时,您将阻止从黑名单域加载。所以这取决于你在黑名单中有多少广告服务域名,幸运的是,有一个网站()为你提供了一个很长的广告服务域名列表,并以多种风格列出了它们。
您可以阅读以下文章:
,您将以%100的速度构建它,只要您遵循逐步的说明
总结我们需要做的事情:
- 从pgl.yoyo.org获取广告主机名列表
- 将列表保存到某个位置,在应用程序启动时加载它李>
- 使用
拦截 请求WebViewClient.shouldInterceptRequest(WebView,String)
- 检查请求URL是否属于中的主机名之一 列表并重写它,返回一个虚拟资源,而不是 实际的一个,应该是广告
- 从pgl.yoyo.org获取广告主机名列表
- 将列表保存到某个位置,在应用程序启动时加载它李>
- 使用
拦截 请求WebViewClient.shouldInterceptRequest(WebView,String)
- 检查请求URL是否属于中的主机名之一 列表并重写它,返回一个虚拟资源,而不是 实际的一个,应该是广告
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading (WebView view, String url){
//True if the host application wants to leave the current WebView and handle the url itself, otherwise return false.
return true;
}
});