練炭ブログ

萌え壁紙、Irvine、DMonkey、Proxomitron などの情報を扱ってます。

Proxomitron: window.setIntervalで呼び出される関数のエラーを抑制する

コメントなし»
function hook (obj, name, func) {
  var orig = obj [name];
  var k = '__prox_' + name;
  if (!obj [k]) {
    obj [k] = orig;
  }
  obj [name] = func;
  return orig;
}
hook (window, 'setInterval', function (h, ms) {
  function f () {
    try {
      h ();
    }
    catch (e) { }
  }
  return window.__prox_setInterval (f, ms);
});

『Golden Marriage -Jewel Days-』のページでテキストを選択できない件

コメントなし»

Internet Explorer で ensemble の『Golden Marriage -Jewel Days-』のページを開くと、マウスのボタン押し下げ移動でテキストを選択できません。
(スペックのページが試しやすいです。)

Shift キー押し下げクリックでの選択や、Ctrl+A による全選択はできます。またボタン押し下げ移動でも、マウスを素早く動かせば最初の数文字だけ選択できることもあります。

調べてみたところ、window.setInterval で実行される関数内でエラーが発生しており、スクリプトエラーが発生すると IE ではユーザ側の操作が途切れてしまう、というのが原因のようです。
(インターネットオプションの設定にもよるのかもしれません。)

再現用コード。

<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>

<body style="font-size:2em;">
<p>abcdefghijklmnopqrstuvwxyz</p><p>1234567890</p>
<p>abcdefghijklmnopqrstuvwxyz</p><p>1234567890</p>
<p>abcdefghijklmnopqrstuvwxyz</p><p>1234567890</p>
</body>

<script type="text/javascript">
window.setInterval (function () {
  var a = b;
}, 100);
</script>

</html>

snowfall.jquery.js というスクリプトで、画面の下から上に泡が上っていくという演出がされており(スペックのページだとほとんど見えないけど……)、その処理内でエラーになっています。

スクリプトの出処は↓と思われます。
とっても幻想的な泡のスクリプト!実装方法やサンプルを紹介 | Design Color
泡の数を複数の場所に直接数字で書き込むというのが間違いのもとですね。

せめて PageProbe.js のパネル内は選択できるようにしたい……。

結論:IEはそびえ立つクソ