現在、ある時点でJavascriptをテキストエリアに入力して実行できるようにするプロジェクトに取り組んでいます。ページを監視し、サーバー データに送信する多くのバックグラウンド コードがあります。これらはすべてプライベート関数に含まれているため、コンソールを使用して単純に侵入することはできません。唯一の問題は、テキストエリアに入力されたコードが、サーバー関数を含むプライベート関数内で評価されるため、サイトの内部にアクセスできることです。どうすればそれを分離して、スコープがプライベート関数の外になるようにすることができますか? 以下に例を示します。
<script>
var x = 2;
(function(){
var x = 10;
var elem = document.createElement('button');
elem.addEventListener('click',function(){
alert(x);
});
document.body.appendChild(elem);
})();
</script>
この例では、ボタンが押されたときに x が 10 ではなく 2 を返すようにします。したがって、グローバル スコープ内にあるかのように強制的に実行されます。
編集
正しい道を進んでいるように見えるウィンドウに関数をバインドしようとしましたが、探していた効果はありませんでした。
<script>
var x = 2;
(function(){
var x = 10;
var elem = document.createElement('button');
elem.addEventListener('click',(function(){
alert(x);
}).bind(window));
document.body.appendChild(elem);
})();
</script>
ウィンドウを関数に適用しようとしましたが、残念ながらそれもうまくいきませんでした。