ユーザーがブラウザー開発者コンソールまたは他のブラウザー開発者ツールにロードした自動化されたメソッド (javascript) ではなく、実際のユーザーによってボタンのクリックが実行されたかどうかを検出できる方法はありますか?
さまざまなスタックオーバーフローの投稿で提案されている次の方法を試しましたが、どれも機能していないようです。参照: click() がマウス クリックなのか、何らかのコードによってトリガーされたのかを検出する方法は?
スクリプト検出方法が試行され、失敗しました:
mybutton.click(function (e) {
if (!e.which) {
//Triggered by code NOT Actually clicked
alert(' e.which - not a real button click')
} else if ('isTrusted' in e && !e.isTrsuted) {
//Triggered by code NOT Actually clicked
alert(' e.isTrusted - not a real button click')
} else if (e.originalEvent === undefined) {
//Triggered by code NOT Actually clicked
alert(' e.originalEvent - not a realbutton click')
}
// else if (!e.focus) {
// //triggered // does not detect e.focus on a real btn click
// alert(' e.focus - not a realbutton click')
// }
else {
// Button hopefully clicked by a real user and not a script
}
})
次のスクリプトを実行して、Chrome ブラウザー コンソールからボタンのクリックをトリガーすると、上記の方法のいずれも、スクリプトによってトリガーされたものとしてトラップされません。
var button = document.getElementById("btnSubmit");
button.click();
================================================== ========================
多くの知識の共有を促進し、私たち技術者の時間を計り知れないほど節約してくれた素晴らしいサイトを提供してくれた Stackoverflow に感謝します。
私はまだ信頼できる方法を持っていないようです。3 つのブラウザー (FF、IE、Chrome) はすべて、ユーザーが Web ページで JavaScript を実行/挿入するための開発者/コンソール インターフェイスを提供します。各ブラウザ フレーバーは、一部のイベント プロパティ値を少し異なる方法でトラップしているようです。例: Chrome はスクリプト アクティブ化されたクリックと実際のユーザーの違いを e.screenX でトラップしますが、IE では、e.screenX はスクリプト クリック (合成) とユーザー ボタン クリックの両方で同じ値を持ちます。
次の検出方法は、まったく機能しなかったか、ブラウザーによって一貫性がありませんでした: e.which e.isTrsuted e.originalEvent (event.source != window) (e.distance != null)
マウスダウン イベントは実際のユーザーのボタン クリックによってのみトリガーされるように見えますが、ボタン クリック イベントに加えてマウスダウンをエミュレートするスクリプト メソッドがあると想定する必要があります。
$(me.container + ' .mybutton').mousedown(function (e) {
alert('mouseisdown real button click');
}
合成 (スクリプト) ボタンのクリックとユーザーによるボタンのクリックの違いを検出する、複数のブラウザーで機能する信頼性の高い方法を誰かが見つけ出すことができれば、スーパーヒーローの地位に値するでしょう。