包含页面javascripts与外部页面冲突javascripts
我的问题有点难以解释,但我会尝试。 我有2个jsp页面Outer.jsp和Inner.jsp包含页面javascripts与外部页面冲突javascripts
Outer.jsp
脚本:SRC = “tabs.js”
VAR PageTabs = “TAB1”
@包括 “Inner.jsp”
Inner.jsp
脚本:SRC = “tabs.js”
VAR PageTabs = “TAB2 TAB3〜〜TAB4”
两个JSP页面使用相同的tabs.js来渲染页面上的一些标签内容。 “PageTabs”变量是tabs.js使用的许多常用变量之一。因此,渲染时会发生什么,即使在渲染Outer.jsp的选项卡时,tabs.js也会使用最新的“PageTabs”变量,即我们的var PageTabs =“Tab2〜Tab3〜Tab4”。
注意:页面变量和tabs.js是从客户端接收到的标准元素的一部分。所以他们必须被用来为应用提供相同的外观和感觉。 我需要的是一种将“Inner.jsp”与访问“Outer.jsp”脚本隔离的方法。这将防止tab元素对使用哪些变量感到困惑。
我希望我有点清楚。请让我知道是否需要提供更多说明。谢谢。
JavaScript在页面内被自上而下地解释,因此您的第二个PageTabs
值将覆盖第一个值。一种选择是为变量使用不同的名称(并参数化tabs.js函数,而不是依赖于全局变量)。
当使用jsp include时,其中一个非常有用的技巧是让您的.js代码模块化。这也是封装代码并避免冲突的重要方法。
tab.js:
var tabModule = (function(my){
var model;
return {
setModel: function(model){/*....*/}
//other api functions
}
})(tabModoule||{});
Outer.jsp:
tabModule.setModel({PageTabs : "Tab1"});
Innder.jsp:
tabModule.setModel({PageTabs : "Tab2~Tab3~Tab4"});
感谢迈克,会尝试你的方法。 – 2012-03-05 16:55:16
是的,我明白。不幸的是屏幕上有很多共享元素。我知道这是一个糟糕的设计,但我必须忍受这一点。内部页面是否与外部隔离?否则,我将不得不完全重写tabs.js – 2012-03-05 09:02:01
正如我所说,只要它在同一页面内运行,JavaScript的“外部页面”上下文就没有“内部页面”。你可以实现的一个选择是将内部页面变成'
谢谢,我会尝试你的IFrame方法。 – 2012-03-05 16:54:37