Данные externalHTML не полны

HTML:

<div id="WholeNew">
    <script>func2()</script>
    <img src="x" onerror=func1() />
</div>

JS:

function func1()
{
    console.log(arguments.callee.caller.arguments[0].target.parentNode.outerHTML);
}

function func2()
{
    console.log(document.currentScript.parentNode.outerHTML);
}

Теперь посмотрим на вывод в консоли:

Для func1():

<div id="WholeNew">
    <script>func2()</script>
    <img src="x" onerror=func1() />
</div>

Для func2():

<div id="WholeNew">
    <script>func2()</script>
</div>

Почему есть разница в обоих выходах, как элемент в document.callee.caller.arguments[0].target из func1()document.currentScript.parentNode из func2() та же <div>? Мне нужен полный внешний HTML <div> от func2(),

1 ответ

Решение

Проблема в том, что при запросе document.currentScript.parentNode документ еще не готов. Попробуйте получить outerHTML на DOMContentLoaded:

function func2()
{
    currentScriptReference = document.currentScript;
    document.addEventListener('DOMContentLoaded', function(){
      console.log(currentScriptReference.parentNode.outerHTML);
    }, false);
}

Рабочий плункер: https://plnkr.co/edit/koZ1xDlpFacm7r9uY8lC?p=preview

Результат консольного журнала:

<div id="WholeNew">
    <script>func2()</script>
    <img src="x">
</div>
Другие вопросы по тегам