そのため、私はかなり長い間、これについて頭を悩ませてきました。これが状況です。mouseup や mousedown などのイベントが利用可能な場合は使用したくありません。ただし、iPhone の場合、これらは明らかに touchend と touchstart に置き換える必要があります。私がやろうとしているのは、タッチ イベントがサポートされているかどうかではなく、前の 2 つのイベントがサポートされているかどうかを検出することです。これは、Android やその他のデバイスがマウスアップとマウスダウンをサポートしているためです。
この時点で、考えられるすべての検出方法を試しました (type は渡されたイベントの種類です)。
var el = document.createElement('div');
eventName = 'on' + type;
var isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, 'return;');
isSupported = typeof el[eventName] == 'function';
}
と
if(document.hasOwnProperty('on' + type)
&& typeof document['on' + type] !== 'undefined') {
return true;
}
と
return 'on' + type in document.documentElement;
問題は、これらのメソッドのそれぞれが、私の信頼できる iPhone で true と評価されているように見えることです。私は本当にいくつかの洞察を使うことができました。
1 つの要件は、関数が型の文字列を受け取る必要があることです。「document.onEvent」のようなことはできません。テストするイベントのコレクションがあり、とにかく動的にする必要があります。ブラウザのスニッフィングもありません。
これらのさまざまなアイデアについてもいくつかの記事を見たので、グーグルで調べました。
http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ http://www.asiantravelhotel.com/javascript/onbeforeunload-support-detection.html