提问人:TechTurtle 提问时间:4/13/2023 最后编辑:marc_sTechTurtle 更新时间:4/19/2023 访问量:75
使用 iframe(jQuery 2.1.3 源代码)的任何替代方案?
Any alternative of using iframe ( jQuery 2.1.3 source code )?
问:
请看jQuery源码: https://code.jquery.com/jquery-2.1.3.js 如果我们搜索文本“<iframe”,那么我们可以看到以下函数:
function defaultDisplay( nodeName ) {
var doc = document,
display = elemdisplay[ nodeName ];
if ( !display ) {
display = actualDisplay( nodeName, doc );
// If the simple way fails, read from inside an iframe
if ( display === "none" || !display ) {
// Use the already-created iframe if possible
iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
doc = iframe[ 0 ].contentDocument;
// Support: IE
doc.write();
doc.close();
display = actualDisplay( nodeName, doc );
iframe.detach();
}
// Store the correct default display
elemdisplay[ nodeName ] = display;
}
return display;
}
这工作正常,但是,我们的 Web 防火墙会阻止此文件,因为怀疑可能存在 iframe 注入。该函数似乎正在创建 iframe 元素并附加该元素。稍后,它使用 iframe 来获取显示值。
使用 iframe 的任何解决方法/替代方案,以便我们可以替换以下行:
iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
请注意,我无法更改防火墙提供商。此外,这是在 AngularJS 1.4.5 上,它对 jQuery 版本有任何依赖关系吗?我所知道的是 AngularJS 1.4.5 需要 jQuery,但不确定是哪个版本。
有没有人使用过 AngularJS 1.4.5 和最新的 jQuery 版本?
答:
如果你查看 Angular JS FAQ,有一个关于在 Angular JS 1.4.5 中使用 jQuery 的问题(重点是我的)
AngularJS 是否使用 jQuery 库?
是的,如果 jQuery 在引导应用程序时存在于您的应用程序中,Angular 可以使用它。如果脚本路径中不存在 jQuery,则 Angular 会回退到它自己的 jQuery 子集实现,我们称之为 jQLite。
Angular 1.3 仅支持 jQuery 2.1 或更高版本。jQuery 1.7 及更高版本可能与 Angular 一起正常工作,但我们不保证这一点。
从中可以看出,对jQuery完全没有硬依赖,Angular JS将使用自己的jQuery版本jQLite。
你应该可以从你的 Angular JS 页面中完全删除 jQuery,假设它没有在其他任何地方使用。
不幸的是,目前尚不清楚“支持 jQuery 2.1 或更高版本”是否包括主要版本。
评论
这是我最终得到的:
//iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
if (!iframe){
iframe = document.createElement("iframe");
iframe.frameBorder = iframe.width = iframe.height = 0;
}
doc.documentElement.appendChild(iframe);
doc = iframe[0].contentDocument;
//rest of the code
这样,现在代理服务器不会显示任何错误消息,因为找不到文本“<iframe”,我们正在通过其他 JS 方式创建。
评论