2012-12-11 99 views
2

有谁知道是否有可能阻止JavaScript函数访问DOM?防止JavaScript函数访问DOM

更多信息:

我想创建一个“线程”对象为JavaScript,如使用Worker对象,在不可用时回退到setTimeOut。显然,工作人员不能访问DOM,我想保持这个标准。

甚至更​​多的信息:

一种可能,但丑陋的可能的解决方案(即我想通了,刚才):

function test(document, window) 
{ 

} 

但没有阻止开发从他调用另一个函数访问DOM但是在这个函数中 - 你必须列出参数的世界。

+2

为什么?你想做什么? – Stefan

+1

一个函数只会做你定义它做的事情。如果你没有使用任何DOM方法,我会说你已经阻止了它! –

+0

我正在尝试为JavaScript创建一个“Threading”对象,例如使用Worker对象,在不可用时回退到setTimeOut。 很显然,工人不能访问DOM,我想保持这个标准。 – Helix

回答

2

不,这在正常的浏览器环境中不可行。

你可能在调用函数之前替换像document.getElementById之类的东西,然后恢复它,但是我相信有办法解决这个问题。

+0

我想没有是迄今为止最好的答案? hehe – Helix

2

您可以在Web Worker中执行该功能。 Web Worker无法访问DOM。

但是真的,你想达到什么目的?

+0

我真的想重新创造这个完全相同的东西,例如创建一个线程对象,该线程对象使用工作对象并退回到setTimeout上 - 同时保持非DOM访问标准。 – Helix

+0

@Helix,你是加载第三方的JavaScript,或者为什么这样关注DOM修改? – jevakallio

+0

如果开发人员使用我的对象并在IE 9及更低版本中编写他的代码,他将能够访问DOM,这无助于看到该代码在Chrome等中不起作用(因为他们将使用工人) - 所以我想这个行为在IE中是一样的 – Helix

2

因为你的目标是执行公约,而不是完全沙箱中的JavaScript,你确实可以使用局部阴影windowdocument和其他DOM接口函数,然后EVAL第三方脚本:

(function test(window, self, top, document) { 
    'use strict'; 
    eval(untrustedCode); 
}()); 

当然,他们仍然可以访问真正的全球对象,但至少不能直接访问。