我正在开发一个遗留企业应用程序,其代码是在2001年使用JavaScript、HTML、Intersystems Caché和CachéWeblink结合编写的。
这就是web应用程序的index.html中存在的内容:
<HTML>
<HEAD>
</HEAD>
<FRAMESET ROWS="32,*" FRAMEBORDER="no" border="0" framespacing="0">
<FRAME
SRC="sysnav.html"
NAME="sysnav"
SCROLLING="no"
MARGINHEIGHT="10"
MARGINWIDTH="10"
NORESIZE>
<FRAME
SRC="cgi-bin/nph-mgwcgi?MGWLPN=dev&wlapp=SYSTEM&SystemAction=DisplayContentFrame"
NAME="content"
SCROLLING="auto"
MARGINHEIGHT="0"
MARGINWIDTH="10">
</FRAMESET>
<noframes>
</noframes>
</HTML>我遇到的问题是,在content框架中,该框架的HTML每次都会自动生成,但是我需要在框架中包含jQuery。
有什么黑客/解决办法,我可以把jQuery推入content框架吗?
发布于 2017-08-19 07:02:15
正如注释中提到的那样,只要帧位于同一域中,就可以将jQuery注入到帧中。
香草Javascript
下面这样的脚本标记可以添加到index.html的index.html元素中。它等待内容帧通过addEventListener()加载,然后动态添加带有src属性的<script>标记,指向由Google托管图书馆承载的jQuery代码。
<script type="text/javascript">
window.addEventListener('DOMContentLoaded', function() {
frames['content'].addEventListener('load', function() {
var contentFrameHead = frames["content"].document.getElementsByTagName("head")[0];
var newScriptTag = document.createElement('script');
newScriptTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js';
contentFrameHead.appendChild(newScriptTag);
});
});
</script>请参阅在这个柱塞例子中演示的内容。尝试单击此框架中加载的Test jQuery按钮,并查看在注释index.html第10行时结果如何变化。
jQuery在index.html中的应用
可能开销太大,但是如果将jQuery添加到index.html中,则可以使用jQuery助手函数。我试图利用这些来缩短代码,但在尝试使用$()创建脚本标记时遇到了一个问题--请参阅这个答案,详细解释为什么不起作用。
因此,使用jQuery辅助函数的代码并不短得多.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>-->
<script type="text/javascript">
$(function() { //DOM-ready
$(frames['content']).on('load', function() { //load for content frame
var newScriptTag = document.createElement('script');
newScriptTag.src = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js';
var contentFrameHead = frames["content"].document.getElementsByTagName("head")[0];
contentFrameHead.appendChild(newScriptTag);
});
});如果内容框架有不同的域
否则,如果内容帧的域与index.html的域不同,那么服务器端脚本(例如,使用cURL、nodeJS等)可能需要获取该页面的内容并包含jQuery库(这本身可能很麻烦)。
发布于 2017-08-18 23:03:04
不是,但您可以创建一个新页面并将其包含在src中。是的,这是丑陋的,但它可能在某些情况下起作用。在新页面中包括jquery,在新页面中包含旧页面。
https://stackoverflow.com/questions/45765557
复制相似问题