Получить содержимое внутри скрипта в виде текста
Я хотел бы напечатать содержимое тега сценария, возможно ли это с помощью jquery?
index.html
<script type="text/javascript">
function sendRequest(uri, handler)
{
}
</script>
Код
alert($("script")[0].???);
результат
function sendRequest(uri, handler)
{
}
7 ответов
Просто дайте тегу вашего скрипта идентификатор:
<div></div>
<script id='script' type='text/javascript'>
$('div').html($('#script').html());
</script>
Вы можете использовать нативный Javascript для этого!
Это напечатает содержимое первого скрипта в документе:
alert(document.getElementsByTagName("script")[0].innerHTML);
Это напечатает содержимое скрипта, который имеет id => "myscript":
alert(document.getElementById("myscript").innerHTML);
Правильный способ получить доступ к текущему скрипту: document.scripts
(который похож на массив HTMLCollection
) последним элементом всегда является текущий скрипт, потому что они обрабатываются и добавляются в этот список в порядке синтаксического анализа и выполнения.
var len = document.scripts.length;
console.log(document.scripts[len - 1].innerHTML);
Единственное предостережение - вы не можете использовать какой-либо setTimeout или обработчик событий, который задержит выполнение кода (потому что следующий скрипт в html может быть проанализирован и добавлен, когда ваш код будет выполняться).
Вы можете использовать document.getElementsByTagName("script"), чтобы получить HTMLCollection со всеми сценариями, а затем выполнить итерацию для получения текста каждого сценария. Очевидно, вы можете получить текст только для локального javascript. Для внешнего скрипта (src=) вы должны использовать вызов ajax для получения текста. Используя jQuery примерно так:
var scripts=document.getElementsByTagName("script");
for(var i=0; i<scripts.length; i++){
script_text=scripts[i].text;
if(script_text.trim()!==""){ // local script text
// so something with script_text ...
}
else{ // external script get with src=...
$.when($.get(scripts[i].src))
.done(function(script_text) {
// so something with script_text ...
});
}
}
Если вы хотите выбрать и отобразить содержимое определенного тега сценария, вы можете попробовать это.
// here this will select script type having attribute type with value "application/json", you can edit any attribute name and value as per need.
let scriptContent = document.querySelector('script[type="application/json"]');
console.log(scriptContent.innerText)
Если вы хотите получить список всех тегов скрипта — используйте querySelectorAll. Надеюсь, это поможет.
Получение содержимого скрипта возможно только в том случае, если скрипт встроен в HTML-файл и не является внешним скриптом (с src=...
)
Без XHR (АКА Аякс)
Если вы хотите распечатать содержимое внешнего скрипта (файл должен находиться в том же домене), то можно использовать <link>
пометить с rel="import"
атрибут, а затем поместите источник сценария в href
приписывать. Вот рабочий пример для этого сайта:
<!DOCTYPE html>
<html lang="en">
<head>
...
<link rel="import" href="autobiographical-number.js">
...
</head>
<body>
<script>
var importedScriptElm = document.querySelector('link[rel="import"]'),
scriptText = scriptText.import.body.innerHTML;
document.currentScript.insertAdjacentHTML('afterend', "<pre>" + scriptText + "</pre>");
</script>
</body>
</html>
Это все еще экспериментальная технология, часть веб-компонентов. читать больше на MDN