1

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].targetoffunc1() document.currentScript.parentNodeの要素func2()が同じであるため、両方の出力に違いがあるのはなぜ<div>ですか? <div>fromの完全な outerHTML が必要func2()です。

4

1 に答える 1

2

問題は、ドキュメントを要求するときにdocument.currentScript.parentNodeまだ準備ができていないことです。outerHTMLonを取得してみてください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>
于 2016-07-15T13:14:23.087 に答える