jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

ChromeでshowModalDialog()を使い続ける方法

HTML5の標準で動くjavascript関数にshowModalDialog()というのがあります。この関数がChromeのバージョン37から使えなくなっているのですが、しばらくの間使い続ける方法を紹介します*1
2014/09/19追記:showModalDialog()を有効にし続けることで、リスクがないとは言えません。(なければChromeから外されたりしないはずです)使い続ける必要性があるかどうかをもう一度考えてから、以下の方法を試してみてください。また、敢えて断ることもないかと思いますが、有効にし続けたことで生じる不都合の責任を私はとれないので、自己責任でお願いします。

showModalDiaglo()とは?

これが起動するとブラウザにもう一つウインドウが作成されて、そちらがアクティブになります。
このウインドウを閉じるまで、他のウインドウをアクティブにできません。
たとえば、郵便番号から住所を検索するサブウインドウを起動したときに、住所を選択するまでほかの元のウインドウに戻れなくするなどの使い方ができます。

Chromeのバージョン37から使えない

基本的に使えません。この関数があって、consoleにerrorメッセージが出るだけで、別のウインドウは開きません*2
Chrome以外のブラウザをそれほど試していませんが、現時点(2014年9月18日)でFirefoxは、この関数を受け付けます。
これからウエブページを作るなら、これに注意して使わないようにすればいいでしょう。しかし、ユーザーとして、この関数が使われているページをChromeで見たい場合には困ります。いろいろ調べた結果、レジストリの値を追加するとしばらくの間はChromeでも使えるようです。ただしregedit.exeでレジストリを書き換えてもうまくいかないことがあります。その時には以下のやり方を試してみてください。

1. http://dl.google.com/dl/edgedl/chrome/policy/policy_templates.zip をダウンロード*3
2. ダウンロードしたzipフォルダを解凍し、/windows/adm/en-US/Chrome.admを見つけておく。
3. コマンドプロンプトからgpedit.mscを起動
4. gpeditのコンピュータの構成/管理用テンプレートを右クリック。テンプレートの削除と追加を選択。
5. 新しく出現したダイアログウインドウの追加をクリックし、先ほど見つけていたChrome.admを選択。
6. 新たに作成された「従来の管理用テンプレート」フォルダの下の/google/Google Chrome/を選択。
7. 右側のウインドウからEnable deprecated web platform featuresを選択。
8. ラジオボタンで有効を選択し、オプションテキストボックス内の表示をクリック。
9. 値として ShowModalDialog_EffectiveUntil20140530 と記入。(2014年5月30日まで有効となります)

おまけ:regedit.exeで書き換える場合

1. HKEY_CURRENT_USER/Software/Policies/Chromium/EnableDeprecatedWebPlatformFeatures のキーを作成*4
2. 文字列を書き込むための変数1を作成
3. ShowModalDialog_EffectiveUntil20150430 を変数の値として記入

最後に疑問

Chromiumのポリシーページを見る限り、アカウントの種類によってregedit.exeが有効かgpedit.mscが有効かが違うようです。この使い分けが私にはまだわかりません。

*1:使えないことは、既にアナウンス済みのようです。 「Google Chrome 37」の安定版リリース Windows向け64ビット版や危険度最高の脆弱性対処 - ITmedia ニュース

*2:2014/09/19追記 もちろん使えなくするには相応の理由があるはずです。以下のChromium Blogで説明されていますが、1.ほかのタブがフリーズするのはそもそもよくない。2複雑なコードでメンテナンスが難しく、しかもバグが多い 3セキュリティのリスクが生じている などの理由が挙げられています。 Chromium Blog: Disabling showModalDialog

*3:以下のページを参考にしています。  How to install the Google Chrome's Group Policy API on Windows

*4:このページを参考にしています Policy List - The Chromium Projects