iframe的url可以前端任何地址,这样就可能出现漏洞,如果钓鱼网站通过js把src改成了危险地址,如果没有监控,就会有很大隐患。所以监控iframe的url变化就是必须要解决的问题了。

第一印象的解决方案是通过setInterval轮询监控,貌似不太理想了,而且有延迟。
千般搜索,终于找到了好的方法,可以通过H5新增的MutationObserver来解决,配合DOMAttrModified和onpropertychange来解决兼容性问题。
废话少说,直接上代码。
index.html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<iframe id="iframeId" src="https://m.ppdai.com">
</iframe>
<script type="text/javascript" charset="utf-8" async defer>
var elemIframList = document.getElementsByTagName('iframe');
for(var i=0;i<elemIframList.length;i++){
initIframeChange(elemIframList[i]);
}
function initIframeChange(elemIfram) {
if (window.MutationObserver || window.webkitMutationObserver) {
// chrome
var callback = function(mutations) {
mutations.forEach(function(mutation) {
iframeSrcChanged(mutation.oldValue,mutation.target.src,mutation.target);
});
};
if (window.MutationObserver) {
var observer = new MutationObserver(callback);
} else {
var observer = new webkitMutationObserver(callback);
}
observer.observe(elemIfram, {
attributes: true,
attributeOldValue: true
});
} else if (elemIfram.addEventListener) {
// Firefox, Opera and Safari
elemIfram.addEventListener("DOMAttrModified", function(event){iframeSrcChanged(event.prevValue,event.newValue,event.target);}, false);
} else if (elemIfram.attachEvent) {
// Internet Explorer
elemIfram.attachEvent("onpropertychange", function(event){iframeSrcChanged(event.prevValue,event.newValue,event.target);});
}
}
function iframeSrcChanged(oldValue,newValue,iframeObj) {
console.log('旧地址:'+oldValue);
console.log('新地址:'+newValue);
if(newValue.indexOf('aaaa')>-1){
console.log('有危险,请马上离开……')
iframeObj.src=oldValue;//钓鱼地址,恢复原url
}else{
console.log('安全地址,允许跳转……');
}
}
// 模拟方法
function simuChange() {
var div = document.getElementById("iframeId");
div.setAttribute("src", "aaaa.html");
}
</script>
</body>
</html>
aaaa.html代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
aaaaaaaa.html
<script type="text/javascript" charset="utf-8" async defer>
console.log('aaaa页面的js执行成功')
</script>
</body>
</html>
执行结果:
危险情况:
安全情况:
我们发现,如果跳转到危险页面,可以直接恢复旧页面,或者跳转指定安全页面,危险页面的js并不会执行。
这貌似就是我们想要的结果。
以上这篇js 监控iframe URL的变化实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# js
# iframe
# JS如何对Iframe内外页面进行操作总结
# Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)
# JS实现iframe中子父页面跨域通讯的方法分析
# JS简单实现父子窗口传值功能示例【未使用iframe框架】
# 利用JS对iframe父子(内外)页面进行操作的方法教程
# JavaScript iframe 实现多窗口通信实例详解
# 给大家
# 跳转
# 不太
# 可以通过
# 希望能
# 如果没有
# 可以直接
# 这篇
# 可能出现
# 小编
# 少说
# 大家多多
# 跳转到
# 改成了
# 找到了
# 必须要
# 就会有
# meta
# javascript
# UTF
相关文章:
如何用西部建站助手快速创建专业网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何快速搭建支持数据库操作的智能建站平台?
制作农业网站的软件,比较好的农业网站推荐一下?
如何快速启动建站代理加盟业务?
如何通过可视化优化提升建站效果?
网站制作的步骤包括,正确网址格式怎么写?
如何通过主机屋免费建站教程十分钟搭建网站?
XML的“混合内容”是什么 怎么用DTD或XSD定义
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何快速选择适合个人网站的云服务器配置?
Android自定义控件实现温度旋转按钮效果
建站主机助手选型指南:2025年热门推荐与高效部署技巧
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
,在苏州找工作,上哪个网站比较好?
建站org新手必看:2024最新搭建流程与模板选择技巧
网站app免费制作软件,能免费看各大网站视频的手机app?
Android使用GridView实现日历的简单功能
如何快速生成专业多端适配建站电话?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
网站制作壁纸教程视频,电脑壁纸网站?
深圳网站制作的公司有哪些,dido官方网站?
如何在服务器上配置二级域名建站?
移民网站制作流程,怎么看加拿大移民官网?
如何在腾讯云服务器快速搭建个人网站?
建站主机如何安装配置?新手必看操作指南
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
建站之星与建站宝盒如何选择最佳方案?
如何在云主机上快速搭建多站点网站?
网站制作企业,网站的banner和导航栏是指什么?
小程序网站制作需要准备什么资料,如何制作小程序?
制作网站公司那家好,网络公司是做什么的?
建站之星展会模板:智能建站与自助搭建高效解决方案
如何通过.red域名打造高辨识度品牌网站?
如何通过VPS建站无需域名直接访问?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
如何用好域名打造高点击率的自主建站?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
建站之星如何通过成品分离优化网站效率?
建站与域名管理如何高效结合?
建站之星如何助力网站排名飙升?揭秘高效技巧
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
javascript中的try catch异常捕获机制用法分析
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何快速搭建安全的FTP站点?
香港网站服务器数量如何影响SEO优化效果?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
c# 在高并发场景下,委托和接口调用的性能对比
*请认真填写需求信息,我们会在24小时内与您取得联系。