最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

jQuery2.2iframe脚本注入的上下文Bug_html/css

来源:懂视网 责编:小采 时间:2020-11-27 16:23:55
文档

jQuery2.2iframe脚本注入的上下文Bug_html/css

jQuery2.2iframe脚本注入的上下文Bug_html/css_WEB-ITnose:最近在iframe中注入脚本,发现jQuery .append()方法和DOM appendChild()方法的区别: DOM API appendChild()方法插入的 会在iframe所在上下文中运行 jQuery(2.2) .append()方法注入的 脚本,其执行上下文总是在当前 window 事实上
推荐度:
导读jQuery2.2iframe脚本注入的上下文Bug_html/css_WEB-ITnose:最近在iframe中注入脚本,发现jQuery .append()方法和DOM appendChild()方法的区别: DOM API appendChild()方法插入的 会在iframe所在上下文中运行 jQuery(2.2) .append()方法注入的 脚本,其执行上下文总是在当前 window 事实上

最近在iframe中注入脚本,发现jQuery .append()方法和DOM appendChild()方法的区别:

  • DOM API appendChild()方法插入的 输出为: window.id == undefined,说明作用域是隔离的。改用jQuery .append()方法插入:

    var el = idocument.createElement('script');el.text = injected_script;$(idocument.body).append(el);

    输出为: window.id == parent,显然jQuery不是单纯调用 appendChild(),还做了别的处理。 下面来看jQuery源码。

    禁用脚本标签

    在Github可访问jQuery源码,看这个文件: manipulation.js。 在真正插入

    disableScript如果做到禁用脚本的呢?请看:

    function disableScript( elem ) { elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; return elem;}

    对于设置了 type="text/javascript的脚本,其 type被重写为 type = "true/text/javascript";对于未设置 type的脚本,其 type被重写为 false/。 总之,浏览器不再把该标签识别为页面脚本,从而禁止了浏览器对

  • jQuery.globalEval()最终调用了JavaScript eval来执行脚本, 所以脚本上下文在jQuery所在的 window里。源码: core.js

    jQuery.extend( { // ... globalEval: function( code ) { var script, indirect = eval; code = jQuery.trim( code ); if ( code ) { if ( code.indexOf( "use strict" ) === 1 ) { script = document.createElement( "script" ); script.text = code; document.head.appendChild( script ).parentNode.removeChild( script ); } else { indirect( code ); } } },

    在jQuery最新的 master分支中,上下文的问题已经被 修正了。 domManip()方法中最后会调用 DOMEval而不是 globalEval, 同时 globalEval也被实现为 domEval了(见 master/core.js), 不再使用JavaScript eval()。

    // manipulation.jsDOMEval( node.textContent.replace( rcleanScript, "" ), doc );// core.jsglobalEval: function( code ) { DOMEval( code );}

    声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文档

    jQuery2.2iframe脚本注入的上下文Bug_html/css

    jQuery2.2iframe脚本注入的上下文Bug_html/css_WEB-ITnose:最近在iframe中注入脚本,发现jQuery .append()方法和DOM appendChild()方法的区别: DOM API appendChild()方法插入的 会在iframe所在上下文中运行 jQuery(2.2) .append()方法注入的 脚本,其执行上下文总是在当前 window 事实上
    推荐度:
    标签: it 脚本 html
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top