Контроль объема вызова document.write, поступающего от третьей стороны - PullRequest
4 голосов
/ 02 июня 2010

Я пишу веб-страницу, которая опирается на внешний файл javascript (который я не контролирую), который возвращает данные с помощью document.write's. Есть ли способ динамического вызова функции без перезаписи всего документа? Вот самый краткий код, который я могу придумать:

<html>    
<head>
<script type="text/javascript">
    function horriblefunction () {
        document.write("new text");
    }
</script>
</head>

<body>
Starting Text...
<div id="pleasewriteinme"></div>
Other text...
<button onclick="horriblefunction();">Click</button>
</body>
</html>

Начинается идея о том, что без изменения «ужасной функции ()» (поскольку он внешний) новый текст можно поместить в div вместо перезаписи страницы. Возможно ли это, или функция должна вызываться внутри div при создании страницы?

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 02 июня 2010

Единственный способ использовать document.write после того, как страница закончит рендеринг, это временно заменить функцию одной из ваших собственных функций, которая поместит содержимое в div. Э.Г.

function horriblefunction() { 
    var old_dw = document.write;
    document.write = function(text) { 
        document.getElementById( 'some_div' ).innerHTML = text;
    }

    // now call your external JS function that uses document.write

    document.write = old_dw;
}

Это будет работать до тех пор, пока внешний JS уже загружен, а вы просто вызываете функцию. Если вам нужно загрузить JS (скажем, вставив новый тег <script> в DOM), помните, что эта операция асинхронная, и вам нужно будет наблюдать за DOM, чтобы знать, когда безопасно восстановить старую версию document.write.

2 голосов
/ 02 июня 2010

Попробуйте использовать динамическую загрузку скрипта из http://bezen.org/javascript/index.html

bezen.domwrite.js - захватывает document.write и writeln для безопасной загрузки внешних скриптов после загрузки страницы.

...