3

我正在开发一个遗留企业应用程序,其代码是在 2001 年使用 JavaScript、HTML、Intersystems Caché 和 Caché Weblink 组合编写的。

这是index.htmlWeb 应用程序中存在的内容:

<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框架吗?

4

2 回答 2

4

正如评论中提到的,只要框架在同一个域中,jQuery 就可以被注入到框架中。

香草 Javascript

可以将如下所示的脚本标签添加到index.html<head>的元素中。它一直等到通过addEventListener()加载内容框架,然后动态添加一个标签,该标签的src属性指向由Google Hosted Libraries托管的 jQuery 代码。<script>

<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>

请参阅此 plunker 示例中演示的内容。尝试单击此框架中标记为 Test jQuery Loaded 的按钮?并在注释index.html的第 10 行时查看结果如何变化。

在 index.html 中使用 jQuery

也许开销太大,但如果将 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 等的 PHP)来获取该页面的内容并包含jQuery 库(它本身可能很麻烦)。

于 2017-08-19T07:02:15.477 回答
2

不,但您可以创建一个新页面并将其包含在 src.xml 中。是的,它很丑陋,但在某些情况下它可以工作。在新页面中包含 jquery,并在新页面中包含旧页面。

于 2017-08-18T23:03:04.113 回答