微信小程序之简单的广告拦截
导语:我们在web-view内嵌网上的某些网站比如我内嵌的小说网站,会包含某些影响使用和含有诱导链接的垃圾广告,这时我们该怎么处理呢?
首先,要是自己写的网站,就可以自己添加防范措施防止垃圾广告嵌入,比如针对XSS跨站脚本
或SQL注入
等的输入校验
防范措施,或是部署在用户端/服务端
的URL拦截
等。
而我们在不需要自己重新搭建网站一个已经存在的网站而是直接嵌入别人的网站时,怎么处理误点垃圾广告操作?
我的方法是参考的Url拦截机制,拦截后跳转回web-view页面,并加载误点时正在访问的页面,首先说一下我的方法的限制:
1.针对那种经过特别处理的垃圾广告网站,比如说:a.点进去之后进入垃圾网站,点击返回时垃圾网站会再次给你重定向到另一个垃圾网站;b.或是垃圾网站设置了跳转限制,在你Url拦截到要跳转到小程序页面时,他会在你跳转之前先跳转到他的页面。
之后我想了想,上述ab两种情况,对于浏览器这种流氓行为有时是有效的。不过当嵌入小程序,因为小程序和web-view内嵌的网页之间的隔离性,理论上说ab两种行为也会被拦截
2.由于web-view自定义顶部导航失效,我的转码阅读页面和web-view页面都嵌入了tabbar里,
如下是三种跳转方式间的区别,可以看到我只有用wx.reLaunch()
,而我也尝试过其他两种reDirectTo()
和navigateTo()
确实是无效的。
这样会将所有页面关闭,目前我还没有找到解决方案。
需求:某个替代web-view的自定义导航栏里的自定义按钮的方案:
实现:在访问web-view页面时点击某个按钮(而不是我现在的底部tabBar)跳转到阅读器模式
解决:1.会省掉阅读器模式的刷新按钮,直接就不用自定义顶部导航栏
2.不用tabBar模式,就可以不用wx.reLaunch()
跳转,无需关闭所有页面)
要是有读者有好的解决方案欢迎下方留言,谢谢!
下面贴上我完整的messageShow()代码:
messageShow : function(e){
console.log(e.detail);
var curUrl = e.detail.src;
if (curUrl.substring(0, 20) == "https://m.88dush.com" ){
if (curUrl.substring(21, 25) == "book" ){
wx.setStorageSync('curUrl',curUrl);
try {
var thisUrl = wx.getStorageSync('curUrl');
if (thisUrl) {
console.log("设置成功 curUrl=" + thisUrl);
}
} catch (e) {
console.log(e);
}
}
}
else if (curUrl.substring(0, 21) != "https://so.88dush.com"){
console.log("垃圾广告");
try {
var thisUrl = wx.getStorageSync('curUrl');
if (thisUrl) {
//console.log(" curUrl=" + thisUrl);
wx.reLaunch({
//url: '../searchbaidu/searchbaidu?url=' + thisUrl + '&sid=' + util.formatTime(new Date()),
url: '../searchbaidu/searchre?url=' + thisUrl,
})
}/*else{
wx.reLaunch({
url: '../index/index',
})
}*/
} catch (e) {
console.log(e);
}
//wx.navigateBack();
}
},
wxml代码
<!-- 小说搜索接口-->
<!-- 有参 -->
<!-- <web-view src="https://so.88dush.com/search/index.php?search_field=0&q={{keyword}}" bindload="messageShow"
wx:if="{{keyword!=''}}"></web-view> -->
<web-view src="https://so.88dush.com/search/index.php?q={{keyword}}" bindload="messageShow"
wx:if="{{keyword!='' && url==''}}"></web-view>
<!-- 传参 -->
<web-view src="{{url}}" bindload="messageShow"
wx:else></web-view>