包含与外部页面javascripts冲突的页面javascripts

包含与外部页面javascripts冲突的页面javascripts,java,javascript,jsp,Java,Javascript,Jsp,我的问题有点难以解释,但我会努力的。 我有两个jsp页面Outer.jsp和Inner.jsp Outer.jsp 脚本:src=“tabs.js” var PageTabs=“Tab1” @包括“Inner.jsp” internal.jsp 脚本:src=“tabs.js” var PageTabs=“Tab2~Tab3~Tab4” 两个jsp页面都使用相同的tabs.js来呈现页面上的一些选项卡元素。“PageTabs”变量是tabs.js使用的许多常见变量之一。因此,在渲染时,tabs.

我的问题有点难以解释,但我会努力的。 我有两个jsp页面Outer.jsp和Inner.jsp

Outer.jsp

脚本:src=“tabs.js”

var PageTabs=“Tab1”

@包括“Inner.jsp”

internal.jsp

脚本:src=“tabs.js”

var PageTabs=“Tab2~Tab3~Tab4”

两个jsp页面都使用相同的tabs.js来呈现页面上的一些选项卡元素。“PageTabs”变量是tabs.js使用的许多常见变量之一。因此,在渲染时,tabs.js会使用最新的“PageTabs”变量,即var PageTabs=“Tab2~Tab3~Tab4”,即使在渲染Outer.jsp的选项卡时也是如此

注意:页面变量和tabs.js是从客户端接收的标准元素的一部分。因此,它们必须被用来为应用程序提供相同的外观和感觉。 我需要的是一种将“Inner.jsp”与访问“Outer.jsp”脚本隔离开来的方法。这将防止tabs元素对要使用的变量产生混淆


我希望我有点清楚。请让我知道,如果我需要提供任何更多的澄清。谢谢。

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"});

是的,我明白。不幸的是,屏幕上有很多共享元素。我知道这是一个糟糕的设计,但我不得不接受它。内页与外页之间是否存在隔离?否则,我将不得不完全重写tabs.js。正如我所说,JavaScript的“外部页面”上下文没有“内部页面”,只要它在同一页面中运行。您可以实现的一个选项是将内部页面转换为
(如果可能的话)。但是,如果inner.jsp和outer.jsp呈现同一页面的不同(不可分离)部分,您就不走运了。谢谢,我将尝试您的IFrame方法。谢谢,Mike,我将尝试您的方法。