5

Web ページに挿入されるコードに取り組んでいます (ブラウザー アドオンまたはスクリプト タグを使用)。

JSON問題は、window.location、 、 などのグローバル オブジェクトと変数を使用する必要がString.splitあり、これらの実装が Web ページによって変更されている可能性があることです。これによりコードが失敗する可能性があり、これはセキュリティ上の問題です。

例:

>>> String.prototype.split = function() { return 'foo'; };
function()
>>> 'a,b,c'.split(',');  // gives unexpected result
"foo"

では、変更前のオブジェクトと関数のブラウザーの既定の実装にアクセスする方法はありますか? 標準である必要はありません。機能が存在することを望んでいます。

4

1 に答える 1

4

アップデート

おそらく、より実行可能な方法は、空<iframe>を動的に作成することです。

String.prototype.split親ウィンドウで汚染されているが、からクリーンなものを取得する例を次に示します<iframe>

<html>
<head>
<script type="text/javascript">
    function onBodyLoad() {

        String.prototype.split = function() { return 'foo'; }; // contaminate original window
        console.log(String.prototype.split); // yeah, it's contaminated

        var acr = document.getElementById("accessor");
        acr.onclick = function ()
        {
            var dummyFrame = document.createElement("iframe");
            document.body.appendChild(dummyFrame); 
            console.log(dummyFrame.contentWindow.String.prototype.split); // uncontaminated
        }
    }
</script>
</head>
<body onload="onBodyLoad()">
    <a href="#" id="accessor">Access iframe Window object</a>
</body>
</html>

普通の意味ではありません。そこにはいくつかのエキゾチックなハックがあるかもしれませんが.

私が考えることができる唯一の方法は、コードが他のスクリプトよりも先に読み込まれるようにすることでした。その要件が満たされていれば、必要なグローバル変数を安全な場所に複製できます。

于 2012-06-12T09:22:02.143 に答える