onbeforeunloadの仕組みと理由

昨日、bugzilla mozilla.orgのWONTFIX解決で、 バグ番号641509の 「onbeforeunloadイベントはサイト提供のテキストを表示せず、標準のメッセージのみを表示します」とコメントから判断して、完全に取消不能です。 この点で、私はこの問題の歴史について少し書きたいと思いました。



多くの人は、onbeforeunloadのおかげで、ユーザーに未保存のデータがある場合(たとえば、フォームに書かれているが、フォーラムのメッセージは送信されていない場合)、Webページを離れないように求めることができます。 これを行うには、次のJavaScriptのようなものを追加します。

window.onbeforeunload = function (evt) { var message = "Document 'foo' is not saved. You will lost the changes if you leave the page."; if (typeof evt == "undefined") { evt = window.event; } if (evt) { evt.returnValue = message; } return message; }
      
      





その後、理想的には、ユーザーがページを離れる(何らかの方法で-タブを閉じる、ブラウザ全体を閉じる、ページをリロードする、アドレスバーに新しいアドレスを入力する、ブックマークに移動するなど)場合、確認メッセージが表示され、ページを離れることをキャンセルできます。 以前は、悪意のないサイト作成者がこのウィンドウを使用してユーザーの裏をかき、ページ上でユーザーを遅らせました。たとえば、「OK」をクリックしてサイトでの作業を続行し、「キャンセル」でテキストを閉じました」(実際、ボタンは逆に機能していました)。 または、もっと怖いもの、たとえば「OKをクリックして、クレジットカードから1000ドルの引き出しを確認します」などです。



その後、ブラウザはより賢くなり、補助テキストを追加し始め、ユーザーを欺くことが難しくなりました。 たとえば、IE8での方法は次のとおりです。



Firefox 3にはほぼ同じテキストがありました:



すべてを読めば、サイトが何を報告し、ブラウザが何であるかが明らかになります。 ただし、まだカンニングはできます。



正しい作者はSafariとChromeをしました。 これらのブラウザーでは、ウィンドウは次のようになります。







ここでは、ボタン上に直接アクションの明確な説明が表示されます。 ユーザーが「退場」をクリックして滞在し、「滞在」をクリックして退場するように説得することは、すでに非常に困難です。 私の意見では、解決策は完璧であり、このトピックを閉じることができます。 一般に、ご存知のように、ほとんどすべてのダイアログのフェースレスOKはアクションの名前(たとえば、「ファイルの削除」、「検索」、「行の追加」、「ファイルを開く」など)に置き換える必要があります。これにより、ユーザーエラーの数が減ります。たとえ対話のテキストを完全に制御している場合でも。



バグ641509のドラマは何でしたか? Firefox 4以降でのこの確認は次のようになります。



ご覧のとおり、カスタムテキストは完全に消えています。 バージョン4以降、Webサイトはユーザーに追加のメッセージを通知できず、ユーザーが特に退去したくない理由を説明できません。 たとえば、1つのウィンドウで多数のドキュメントを操作するためのインターフェイスを実装し、その一部が保存されていない場合、どれを保存するかを言うことができますが、Firefoxではこれを理解できません。 保存したくない場合があり、メッセージを見た場合は静かにページを離れるので、それが何であるかわかりません。 バグに関するコメントのシートには、このウィンドウでユーザーに伝えたいことについて不満を抱いているWebプログラマーの他の多くの例があります。



Firefoxチームは、Webページでユーザーを許可しない理由を説明する必要がある場合、これは悪いWebページであると言って、その決定を説明します。 これが常に真実であるかどうか、そして悪いWebページが機能することを禁止するのはブラウザのビジネスであるかどうかという問題は未解決のままです。 ここで、結局のところ、ポルノバナーを含む1,000個のポップアップについては説明していません。 何らかの方法で、Webサイトの作成者は、ユーザーがFirefoxを使用している場合、ユーザーに表示されるメッセージが表示されないことを覚えておく必要があります。



なぜOperaに言及しなかったのですか? そして、その中にはウィンドウはまったく発行されません。 ページは静かに閉じます。 開発者によると、Operaはonbeforeunloadイベントを意図的にサポートしていません。



All Articles