Получить содержимое внутри скрипта в виде текста

Я хотел бы напечатать содержимое тега сценария, возможно ли это с помощью 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>
​

http://jsfiddle.net/UBw44/

Вы можете использовать нативный Javascript для этого!

Это напечатает содержимое первого скрипта в документе:

alert(document.getElementsByTagName("script")[0].innerHTML);

Это напечатает содержимое скрипта, который имеет id => "myscript":

alert(document.getElementById("myscript").innerHTML);

Попробуй это:

console.log(($("script")[0]).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

Другие вопросы по тегам