1

クロムのスクリプトタグIDが作成され、ウィンドウオブジェクトに保存されていることがわかりました。

<script id="deploy" type="text/html">blah</script>

window.deploy= ➜

<script id="deploy" type="text/html">blah</script>

Object.keys(window)「展開」を含まない

明らかに新しい問題ではありません

だから私の質問

これに対する解決策を見つけた人はいますか(クロムが私の世界を汚染するのを防ぎます)、私が思いついた唯一のことは次のとおりです:-

$('script[type="text/html"]').each ->
# stuff
delete window[@.getAttribute 'id']

私の「解決策」は、クロムでないときにグローバル変数を削除するリスクがあります。

ただし、私のソリューションがないと、スクリプト ID が衝突した場合にクロムがグローバル変数を上書きする可能性があります。

何という混乱!

どんな助けでも大歓迎です!

4

2 に答える 2

4

id属性を使用して HTML ドキュメント内の要素に名前を付ける場合、および Window オブジェクトにその名前のプロパティがまだない場合、Window オブジェクトにはid、名前が属性の値であり、値が HTMLElement である数値化できないプロパティが与えられます。そのドキュメント要素を表すオブジェクト。

(私が強調します)

出典: JavaScript: The Definitive Guide、第 6 版

于 2012-08-31T10:14:31.830 に答える
1

私が思いついたもの:

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
    <script id="deploy" type="text/html">blah</script>
    <script type="text/javascript">
        $(function () {
            $('script[type="text/html"]').each(function (index, element) {
                var id = $(element).attr('id');

                console.log(element);
                console.log(window[id]);

                if (window[id] === element) {
                    window[id] = undefined;
                }

                console.log(window[id]);
            });
        });
    </script>
</head>
<body>

</body>
</html>

これにより、グローバルが削除される前にノードと同じかどうかがチェックされます。

scriptこれは、タグだけでなく、ID ごとに発生することに注意してください。ヨッシーが言ったように、グローバルスコープを汚染するべきではありませんが、上記の解決策はうまくいくはずです。

于 2012-08-31T10:13:52.573 に答える