невозможно обновить страницу, когда я использую setInterval () и передаю функцию, которая использует document.write для вывода некоторого JavaScript на страницу - PullRequest
0 голосов
/ 28 октября 2010

в основном у меня есть пустая HTML-страница, которая включает файл javascript, и в файле javascript у меня есть это:

function doIt() {
 document.writeln("asdf");
}

// could also be setTimeout
setInterval("doIt()", 5000);

Когда загружается html-страница, она ждет 5 секунд, а затем выводит «asdf» каждые 5 секунд на экран. Если я нажму «Обновить» или «f5», ничего не произойдет. Когда я просматриваю источник, страница пуста. Есть ли причина, по которой при просмотре исходного кода я даже не вижу:

<script type="text/javascript" src="test.js"></script>

на html-странице? Я предполагаю, что не могу обновить страницу из-за пустого источника. Есть ли способы решить эту проблему?

Спасибо!

Ответы [ 4 ]

1 голос
/ 28 октября 2010

Когда HTML-страница загружается, она ждет 5 секунд, а затем выводит «asdf» каждые 5 секунд на экран.

Когда страница завершит загрузку, документ закрываетсяи не может быть написаноПоэтому, если вы звоните document.write() после этого момента, предполагается, что вы хотите позвонить document.open() и полностью заменить страницу .Старый документ выгружается и заменяется новым, который вы собираетесь написать, поэтому вы больше не можете просматривать исходный текст старой страницы.

И поскольку вы не звоните document.close(), пульсатор будет вращаться, ожидая завершения нового документа (что никогда не произойдет).

Как сказал SLaks, вам следует взаимодействовать с DOM вместо использования document.write(), что обычно лучшеизбегать (за исключением нескольких конкретных случаев, связанных с записью исходных документов во всплывающие окна или в фреймы).

1 голос
/ 28 октября 2010

Вы не можете использовать document.write, например, после завершения загрузки страницы.

Вместо этого следует добавить текст элемента DOM.

0 голосов
/ 28 октября 2010

Просто идея, не было возможности проверить это.

Пусть ваш скрипт создаст пустое окно и вставит туда скрипт для вызова внешнего скрипта:

var oWindow = window.open("about:blank", "dummy", "width=0,height=0");
oWindow.document.write("<html>");
oWindow.document.write("<body>");
oWindow.document.write("<" + "script" + " type=\"text/javascript\" src=\"external.js\"></" + "script>");
oWindow.document.write("</body>");
oWindow.document.write("</html>");
oWindow.document.close();

, а затем прочитайте oWindow.document.body.innerHTML, чтобы увидеть «выходные данные» внешнего скрипта.

0 голосов
/ 28 октября 2010

спасибо, ребята.я смог увидеть, что вы, ребята, имели в виду, изменив DOM для добавления в javascript после загрузки страницы.Я смог это сделать, но столкнулся с той же проблемой:

В основном мне нужно было использовать setInterval, чтобы выполнить некоторый опрос, чтобы дождаться отправки данных в этот iframe от родителя, как только он получил данные, затемэто вывело бы некоторый JavaScript (для которого я создал новый элемент сценария в DOM).но проблема в том, что src этого элемента указывает на внешний URL-адрес, из которого я получаю некоторые данные, и способ, которым внешний источник возвращает данные, - это использование document.write - который я не могу контролировать.

есть ли другой вариант для опроса, кроме использования setInterval?Я хотел бы продолжить опрос до максимального времени ожидания, а затем, если максимальное время ожидания достигнуто, затем выполнить оставшуюся часть страницы, тогда мне не придется беспокоиться о проблеме document.write из внешнего источника.

- это еще один вариант сделать этот вызов внешнему источнику, проанализировать ответ и создать элементы dom с помощью моего javascript?

...