我希望能够在我的网页上运行JavaScript,并保证可以干净地停止它而不会导致问题。您可以将其视为运行JavaScript,就像它包含在iFrame中一样,但允许它修改并与根DOM交互。这样,如果我删除iFrame,JS就会死掉。
我想将任何网页变成奇怪的突变SPA。这意味着采用传统的HTML,CSS和JavaScript,然后自己处理页面切换。为了正确地切换页面以避免先前执行JS的工件,我需要确保一个页面的JS不与下一页的JS进行交互。理想情况下,要切换页面,它将遵循以下通用公式:
我运行的测试实际上是在全屏幕iframe(like this)中加载网页,这实现了我在执行JavaScript时所需的遏制级别,但它有严重的性能损失。我想要包含的JavaScript,性能损失最小。
我有一个想法是在下载JavaScript之后,动态地替换实际的代码。我会更改代码而不是引用Window,引用Window.parent。
我并不赞同使用iFrames的想法,但它似乎是最接近"容器"您可以使用JavaScript /浏览器。我喜欢其他选择。
github.com/codeschool/javascript-sandbox
instantclick.io /
影子DOM ?
构建这样的应用程序是否可行,以便正确处理JS生命周期和页面切换?
答案 0 :(得分:1)
加载脚本后无法卸载脚本。但是你可以将一些脚本封装在一个对象中,然后创建或销毁这个对象。
例如:
var Robot = function(){
return{
sayHello : function(){
alert("Hello!");
},
doSomethingElse : function(){
alert("I'm doing something else");
}
}
}
robot = new Robot();
robot.sayHello(); // Actually alerts "Hello!"
robot = null; // the robot is destroyed.
在您的情况下,如果您通过ajax加载脚本,请在对象中说出这段脚本:
{
sayHello : function(){
alert("Hello!");
},
doSomethingElse : function(){
alert("I'm doing something else");
}
}
然后,您可以将此脚本封装在函数中:
var Robot = null,
robot = null;
$.get('scriptURL', function(ajaxedScriptObject){
Robot = function(){ return ajaxedScriptObject; };
createRobot();
})
function createRobot(){
robot = new Robot();
sayHello();
destroyRobot();
}
function sayHello(){
robot.sayHello(); // Should alert "Hello!" :)
}
function destroyRobot(){
robot = null;
}