Я не думаю, что есть простое решение, чтобы просто "захватить исходный код", поскольку оно должно быть чем-то, что предоставляется браузером. Но, , если вы заинтересованы в этом только для части страницы , тогда у меня есть обходной путь для вас.
Вы можете заключить интересующий раздел в «замороженный» скрипт:
<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