電子書籍の厳選無料作品が豊富!

onbeforeunload イベントを使って離脱防止ダイアログを表示させていますが、特定のリンクのリンククリックに対しては、ハンドラの戻り値としてnullを返して、ダイアログを表示させないようにしています。

ChromeやEdgeでは想定通りの挙動をしているのですが、IEでは、onbeforeunload イベントのハンドラの戻り値として null を返すと、メッセージ内容として "null" とダイアログに表示してしまいます。

対策をご存知でしたらご教示ください。
よろしくお願いいたします。

質問者からの補足コメント

  • HAPPY

    ご回答ありがとうございます。
    状況がうまく伝わらなかったようで申し訳ございませんでした。

    以下のページにあるようなコードについての話です。
    https://kght6123.jp/blog/2018/08/30/%E3%83%96%E3 …

    >戻り値を「空白文字列」などにしておけば済む話ではないのでしょうか?
    それですと、ダイアログが表示されてしまいます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2019/04/25 17:47

A 回答 (2件)

No1です。



>以下のページにあるようなコードについての話です。
なるほど。要はキャンセルする場合の挙動の差異ということですね。

手元にあったブラウザで試してみましたが、
( IE(11.28)、Fx(66.0)、Chrome(73.0) でテスト )
 preventDefault() や returnValue に関してもまだ実装がバラバラな状態のようですね。
https://developer.mozilla.org/ja/docs/Web/Events …

unload時の警告ダイアログのon/offを制御をなさりたいものと推測しましたが、ご提示の方法ではうまくいかないようですね。
試したところ、イベントハンドラに空functionを設定するとキャンセル時と同様に何もしないようになります。
ですので、 null を返すのではなく、何もしなければよさそうです。

flagを参照するなら、
 if(flag) return; else return "hogehoge";
みたいな感じでしょうか。
 if(!flag) return "hogehoge";
だけで充分ですね。

これにより、flagセット時(=キャンセル)には、試したどのブラウザでもダイアログは出ず、デフォルトの動作が実行されるようになります。

なお、どの様な使い方を考えていらっしゃるのかわかりませんが、ご提示の参考サイトの様に、二種類のイベントを同じタイミングで設定した場合、その処理順序を(論理的な順序が無いものの場合)あてにできるのかに関しては疑問があると感じますので、注意なさったほうが宜しいかと。
    • good
    • 1

こんにちは



具体的な状況がさっぱりわかりませんが、イベントハンドラからの戻り値をそのままダイアログに表示しているということでしょうか?

通常のエンジンであれば「null」を表示させると文字列の"null"として表示されるはずと思います。
(どのような処理によって、結果に差が出ているのか推測できません)

とは言え・・・
戻り値の受け手側で対処するのなら、仮に、値をmessageとして、
 message?massage:""
みたいにnullなら空白文字に置き換えてあげるとか、

あるいは、イベントハンドラ側で対処するのなら、
>ハンドラの戻り値としてnullを返して~
戻り値を「空白文字列」などにしておけば済む話ではないのでしょうか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!