Подтвердить что ты не робот

Будет ли браузер давать iframe отдельный поток для JavaScript?

Используют ли веб-браузер отдельные потоки исполнения для JavaScript в iframe?

Я считаю, что Chrome использует отдельные потоки для каждой вкладки, поэтому я предполагаю, что JavaScript в iframe будет использовать тот же поток, что и его родительское окно, однако это тоже похоже на риск безопасности.

4b9b3361

Ответ 1

До того, как появился хром, все вкладки любого браузера разделили один и тот же единственный поток JavaScript. Chrome поднял игру здесь, а некоторые другие последовали этому примеру.

Это деталь реализации браузера, поэтому нет твердого ответа. Старые браузеры определенно этого не делают. Я не знаю ни одного браузера, который определенно использует другой поток для iframe, но, честно говоря, я никогда не рассматривал его.

Это не угроза безопасности, так как никакие объекты не выполняются вместе с выполнением потока.

Ответ 2

Подводя итог другим ответам: Нет, iFrames обычно запускаются в том же потоке/процессе, что и главная страница.

Однако, похоже, команда Chromium работает над дальнейшей изоляцией в этой области:

Chromium Issue 99379: Вне процессов iframes [извините, ссылка не работает - если вы можете найти ссылку на проблему, которая работает, пожалуйста дайте мне знать]

Планы проектирования для внепроцессных фреймов

Ответ 3

Поздно, но... хорошая точка, потому что iframe js кажется параллельным в Firefox 16.
Попробуйте с функцией предупреждения (блокировки), вы увидите диалоговые окна, открывающиеся вместе.
Вы не увидите этого в Chrome или IE.
iframe js может получить доступ к родительскому окну в Firefox 16, как обычно, поэтому я могу думать о возможных условиях гонки.

Ответ 4

У меня был тот же самый вопрос в эту ночь, прежде чем проверять любые существующие ответы. В проекте, который я сейчас работаю, мы должны загрузить iFrame, который использует другую фреймворк, и я был любопытным, если бы тот iFrame мог каким-то образом заблокировать поток и повлиять на мое приложение. Ответ: да, это возможно.

Мой тест был выполнен в 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)

Ответ 5

Пробовал ли экспериментировать с этим сегодня в Chrome 28 в Ubuntu. Эта команда используется для просмотра потоков и процессов Chrome

ps axo pid,nlwp,cmd | grep "chrome"

Похоже, что Chrome не создает новые потоки или процессы для iframe. Интересно отметить, что он создает новый процесс для панели инструментов dev.

Ответ 6

Для iFrames нет. Однако, если вы хотите использовать потоки в JavaScript, вы можете использовать Web Workers, рабочий html5-проект, поддерживаемый новыми браузерами. http://www.w3.org/TR/2009/WD-workers-20091029/