Я не думаю, что есть простое решение просто «захватить исходный код», так как это должно быть что-то, что предоставляется браузером. Но, если вы хотите сделать это только для части страницы, у меня есть для вас обходной путь.
Вы можете обернуть интересующий раздел внутри «замороженного» скрипта:
<script id="frozen" type="text/x-frozen-html">
Атрибут type
я только что придумал, но он заставит браузер игнорировать все внутри него. Затем вы добавляете еще один тег сценария (на этот раз правильный javascript) сразу после этого — сценарий «оттаивания». Этот сценарий оттаивания получит замороженный сценарий по идентификатору, возьмет текст внутри него и выполнит document.write
, чтобы добавить фактическое содержимое на страницу. Всякий раз, когда вам нужен исходный код, он по-прежнему фиксируется в виде текста внутри замороженного сценария.
И вот оно. Недостатком является то, что я бы не стал использовать это для всей страницы... (SEO, подсветка синтаксиса, производительность...), но это вполне приемлемо, если у вас есть особые требования к части страницы.
Изменить: вот пример кода. Кроме того, как правильно указал @FlashXSFX, любые теги сценария в замороженном сценарии необходимо экранировать. Итак, в этом простом примере я создам тег <x-script>
для этой цели.
<script id="frozen" type="text/x-frozen-html">
<div id="test">
<x-script type="text/javascript">document.write("hello");</x-script>
</div>
</script>
<script type="text/javascript">
// Grab contents of frozen script and replace `x-script` with `script`
function getSource() {
return document.getElementById("frozen")
.innerHTML.replace(/x-script/gi, "script");
}
// Write it to the document so it actually executes
document.write(getSource());
</script>
Теперь, когда вам нужен источник:
alert(getSource());
См. демонстрацию: http://jsbin.com/uyica3/edit.
person
David Tang
schedule
10.12.2010
<script type="text/javascript">document.write("hello");</script>hello
- person Marcel Korpel   schedule 09.12.2010hello
, потому что он созданdocument.write("hello")
. Я ищу решение общего назначения, не зависящее от кода внутри DIV, что-то, что всегда возвращает исходный код без изменений, сделанных движком Javascript. - person Marco Demaio   schedule 09.12.2010