浏览器会给JavaScript一个单独的线程吗?
网页浏览器是否使用iframe中的JavaScript执行线程?
我相信Chrome为每个选项卡使用单独的线程,所以我猜测,iframe中的JavaScript将与其父窗口共享相同的线程,但是,这似乎也是一个安全风险。
在chrome出现之前,任何浏览器的所有选项卡共享相同的JavaScript单线程。 Chrome在这里提高了游戏速度,其他一些玩家也纷纷效仿。
这是一个浏览器实现细节,所以没有可靠的答案。 旧的浏览器绝对不会。 我不知道任何浏览器肯定使用另一个线程的iframes,但说实话,我从来没有真正看过它。
这不是安全风险,因为没有任何对象与线程执行一起带来。
总结其他答案:不, iFrames通常运行在与主页面相同的线程/进程中 。
但是,Chromium团队似乎正在进一步隔离这个领域:
铬问题99379:进程内iframe [对不起,链接不工作 – 如果你能find一个问题的链接工程,请让我知道]
进程外iframe的devise计划
在这之后,但是…好点,导致iframe js似乎在Firefox 16并发。
尝试使用警报function(阻止),你会看到对话框一起打开。
你不会在Chrome或IE中看到。
像往常一样,iframe js可以在Firefox 16中访问父窗口,所以我可以考虑可能出现的竞态条件。
我今天晚上自己也有同样的问题,在检查任何现有的答案之前。 在我目前正在工作的项目中,我们必须加载一个使用不同框架的iFrame,我很好奇,如果该iFrame可以以某种方式阻止线程并影响我的应用程序。 答案是肯定的,可以。
我的testing是在Chrome中完成的。 在父我已经加载了一个孩子的iFrame。 在父母我已经设置了一个时间间隔console.log文本每一个时间。 然后在iFrame中,我使用了超时来启动阻止线程的'while'。 答案是:iFrame使用相同的线程。
例:
在父母:
setInterval(() => { console.log('iFrame still using the thread'); }, 3000)
在iFrame中:
setTimeout(() => { console.log('now the thread is not working in the iFrame anymore'); while (true) { } }, 10000)
今天在Ubuntu的Chrome 28上做了一些实验。 使用此命令查看Chrome的线程和进程
ps axo pid,nlwp,cmd | grep "chrome"
它看起来像Chrome不产生新的线程或进程iframes。 有趣的是,它为开发工具窗格产生了一个新的进程。
对于iFrames,没有。 但是,如果您想在JavaScript中使用线程,则可以使用Web Workers,这是一个由新浏览器支持的HTML5工作草案。 http://www.w3.org/TR/2009/WD-workers-20091029/