1

WebSocket を集中的に使用する cordova プロジェクトを作成しました。Android プラットフォームに Websocket を実装する Java クラスをいくつか設定しましたが、ネイティブ実装と同じように JavaScript で Websocket を使用することもできます。つまり、onopen、onmessage などのメソッドを持つ websocket オブジェクトがあります...

モバイル サファリ (iPhone) は既に websockets をサポートしているため、javascript 部分を再度実装する必要はありません (両方のプラットフォームで html/css/js ソースが 1 つしかありません)。つまり、Android がサポートされているかどうかを示す関数を作成する必要があります。

私が持っているもの:

var supportsWebSockets = function() {
    if ('WebSocket' in window) {
        if (WebSocket.hasOwnProperty('onopen'))
            return true;
        else
            return false;
    } else {
        return false;
    }
}

しかし、それはそれをしません。次に、WebSocket オブジェクトのすべてのメソッドとプロパティを出力するスクリプトを作成しました。

var obj = new WebSocket('ws://echo.websocket.org');
var methods = [];
for (var m in obj) {
    methods.push(m);
}

document.write(methods.join("<br>"));

モバイルサファリと同じプロパティとメソッドをアンドロイドで出力します。

つまり、空の関数で名前空間を予約していると思います。

WebSockets がサポートされているかどうかを確認するにはどうすればよいですか? ユーザー エージェント文字列を識別に使用したくありません。最終的にサポートされる新しいバージョンが登場したときに再度変更したくないからです。

奇妙なことに、以前は誰もこの問題に遭遇していませんでした..

何かご意見は?

4

2 に答える 2

1

The other answer would give a false negative in Safari. I think the best approach is a combination of three things:

if ('WebSocket' in window
    && (typeof WebSocket === 'function' || typeof WebSocket === 'object')) {
    // supports WebSocket
} else {
    // does not support WebSocket
}
于 2015-06-05T16:54:56.273 に答える
1

わかりましたので、正解がわずかに異なるコメントがあることがわかります。個人的には積極的にチェックするのが好きなので、ブラウザーが JavaScript を使用して WebSockets をサポートしているかどうかを確認するには、次のようにします...

if (typeof WebSocket === "function"){
    // implement WebSockets
} else {
    // fallback
}
于 2015-03-17T10:41:35.650 に答える