2

javascriptで、[オブジェクトウィンドウ]の「ウィンドウ」部分を検出するか、コードがノードサーバーまたはブラウザで実行されているかどうかを確認します

少し多くのコンテキスト。クライアントとサーバーの両方で実行されることになっているnodejs用のモジュールを書いています。いくつかの場所で別の方法で実行する必要があるため、実行されている場所を検出する必要があります。現在、「this」をinit関数に渡して、サーバーでは[object Object]を、ブラウザでは[objectWindow]を取得しています。...しかし、ウィンドウ/オブジェクト部分をチェックする方法がわかりません。typeofは、先頭の「オブジェクト」部分をチェックしているようです。考え?前もって感謝します

4

5 に答える 5

1

[object Object]node.jsと[object Window]ブラウザで確実に受信できる場合は、チェックしてください

var isBrowser = (this.toString().indexOf('Window') != -1);
var isServer = !isBrowser;

文字列のindexOfメソッドは、その文字列内のパラメータの位置をチェックします。戻り値-1は、パラメーターがサブストリングとして存在しないことを意味します。

アップデート

他の人がオブジェクトの存在をチェックすることを提案しているように、またはwindowのように、ブラウザに存在すると予想される他のオブジェクトを同等にチェックできます。ただし、この種のチェックは、上記で提案されています。navigatorlocation

var isBrowser = (this.window == this);

node.jsで参照エラーが発生します。これを行う正しい方法は

var isBrowser = ('window' in this);

または、私が述べたように

var isBrowser = ('navigator' in this);
var isBrowser = ('location' in this);
于 2012-05-05T23:08:15.140 に答える
1

[object Window]は信頼できません。一部の古いブラウザでは、オブジェクトの種類に関係なく[object]orとだけ表示されます。[object Object]

代わりにこれを試してください:

var isBrowser = this instanceof Window;

または、Node.js を使用したことがないので、これはどうですか?

var isBrowser = typeof Window != "undefined";
于 2012-05-05T23:12:18.697 に答える
0

Node 上で実行しているかどうかだけを知りたい場合は、if を参照してくださいthis === this.window

if (this === this.window) {
    // Browser
} else {
    // Node
}

toStringこれは、 の実装が一貫していることを期待するよりも信頼性が高くなりますが、そうではありません。

于 2012-05-05T23:13:23.343 に答える
0

基本的に、スクリプトで Node.js を検出する方法を尋ねています =x

以下は、Underscore.js から変更および拡張されたもので、クライアント/サーバー モジュール コードの一部にもバリアントを使用しています。基本的に、node.js に固​​有のグローバル変数をスキャンします (クライアント側 =x で作成した場合を除く)。

これは、必要なすべての場合に備えて、代替の回答を提供することです。

(function() {
    //this is runned globally at the top somewhere
    //Scans the global variable space for variables unique to node.js
    if(typeof module !== 'undefined' && module.exports && typeof require !== 'undefined' && require.resolve ) {
        this.isNodeJs = true;
    } else {
        this.isNodeJs = false;
    }
})();

または、必要なときだけ呼び出したい場合

function isNodeJs() {
    //this is placed globally at the top somewhere
    //Scans the global variable space for variables unique to node.js
    if(typeof module !== 'undefined' && module.exports && typeof require !== 'undefined' && require.resolve ) {
        return true;
    } else {
        return false;
    }
};
于 2012-05-06T02:10:01.747 に答える
0

簡単にするために、私はあなたが打ち負かすことができないと思います:

if('window' in this) {
    // It's a browser
}
于 2012-05-05T23:25:07.723 に答える