2016-07-15 2 views
0

HTML:outerHTML данных не является полным

<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>? Мне нужно полное externalHTML <div> от func2().

+0

Какой браузер вы используете? Я не могу воспроизвести проблему в IE11 или Chrome51 из-за ошибок. Может иметь какое-то отношение к тому, что призыв устарел. Не быть педантичным, но в чем проблема, которую вы пытаетесь решить с помощью этого кода, поскольку это не похоже на лучший дизайн imho. – Shilly

+0

Я могу успешно запустить код в Chrome 51 и Firefox 47. IE не будет работать из-за использования 'target'. Используйте 'srcElement'. Какая у вас ошибка? Я просто экспериментирую с этим конкретным поведением кода. –

+0

В зависимости от того, где я помещаю определения функций, я получаю, что либо вызывающий, либо вызываемый не определены. В каком месте вы остановили скрипт, содержащий функции? Вы пробовали это с фактическим URL-адресом изображения? Может быть, src «x» возится с вещами. – Shilly

ответ

1

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

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

Работа plunker: https://plnkr.co/edit/koZ1xDlpFacm7r9uY8lC?p=preview

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

<div id="WholeNew"> 
    <script>func2()</script> 
    <img src="x"> 
</div> 
+0

Спасибо. +1. Это очистило его. –