グローバルスコープになっているユーザー定義のJavascript変数、オブジェクトを取得したい

0pt   2018-08-10 23:58
IT技術情報局

複数のJavascriptが埋め込まれるようになってくると、ユーザー定義の変数やオブジェクトがグローバルに定義されているか知りたくなってきたんだけれども、
それらしい方法が見つからなかった。

window、top、selfオブジェクトからグローバルスコープのオブジェクトは参照できるので
下記のオブジェクトから

for (item in window) { console.log(item); }

とやればいいんだけれど、
windowオブジェクトの標準に備わっているプロパティ(onclick等々)も出力されてしまう。
https://developer.mozilla.org/ja/docs/Web/API/Window

なんとかして、ユーザ定義のだけ抽出したいということで、
苦肉の策で、空のウィンドウのwindowオブジェクト以下のプロパティ、メソッドの値を取得して、
それを除外したものがユーザ定義の変数、オブジェクトになるということでいけるじゃないかと思って
下記のスクリプト作ってみた。

var n1 = 1; let n2 = 2; const n3 = 3; n4 = 4; function doSomething() { return true; } (function() { // 即時関数を使うことで、この処理の変数がグローバルスコープにならないようにする。        // ダミーのウィンドウを開く。これが邪魔なので本当は無くしたい。 var win = window.open("","sample"); for (item1 in window) { var userDefined = true; for (item2 in win) { if (item1 == item2) {                     // 標準のプロパティで名前が存在したら出力しない userDefined = false; break; } } if (userDefined) {                 // 標準のプロパティでなかったものだけ出力する console.log(item1); } } }());

これを適当なサイトのブラウザのconsole上で実行する。
最初に、空のウィンドウが開いてしまうので、それは閉じてconsoleの結果を見ると、
ユーザ定義のグローバルスコープの変数、オブジェクトの名前が表示される。

ちなみに、下記のうち出力結果に表示されるのは「n1」と「n4」と「doSomething」

var n1 = 1; let n2 = 2; const n3 = 3; n4 = 4; function doSomething() { return true; }

空のウィンドウが表示されるのは邪魔だし、もう少し良い方法はないかな。。。

Source: Javascriptタグが付けられた新着投稿

   ITアンテナトップページへ
情報処理/ITの話題が沢山。