这是一个线框,用于说明遗留项目的结构,该结构显示了一些性能问题:
对于所有对话框(从jQuery UI),将创建一个新的iframe,并重新下载Home中的所有js,并重新放置所有对象。我可以从jQuery在家中创建对所有新iframe的引用,并可以在每个iframe隔离范围内工作吗?
例如:
[家庭范围]
$("#some-el").data('foo', 'bar');
console.log($("#some-el").data('foo')); // results bar
[App1范围]
//after defined in Home first run
console.log($("#some-el").data('foo')); // results undefined
PS:请记住,这是一个传统架构,所有解决方案都必须考虑这种情况。
最佳答案
我以前遇到过这种情况。一种方法是定义一些加载到iframe中的javascript,这些javascript仅将任何函数调用重新路由到top.functionCall()
,而不包含其实际定义。如果所有功能都在一个名称空间下,这将变得非常简单,如下所示:
父窗口js:
var namespace = (function () {
// all of your functions are in here as properties of namespace
})();
iframe窗口js:
var namespace = top.namespace;
与此相关的一个问题是任何上下文相关的功能(依赖或运行
window
对象的功能)很可能会中断。