2007年8月22日水曜日

JavaScriptを挿入するデフォルトのProxomitronフィルタ修正版

Proxomitron本体にデフォルトで付属しているフィルタは、誤爆を引き起こす要素をいくつか持っています。
以下に挙げるフィルタは、JavaScriptを挿入するタイプのフィルタで出来るだけ誤爆しないように工夫したものです。

HTML文書を読み込む前にJavaScriptを挿入するフィルタ修正版。

[Patterns]
Name = "Kill pop-up windows [2007/08/21] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^<script[ >]|</head>))$STOP()"
Replace = "<script type='text/javascript' src='http://local.ptron/WindowOpen.js'></script>\r\n"

Name = "Suppress all JavaScript errors [2007/08/21] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^<script[ >]|</head>))$STOP()"
Replace = "<script type='text/javascript'>\r\n"
          "function NoError(){return(true);} onerror=NoError;"
          "</script>\r\n"

Name = "Stop browser window resizing [2007/08/21] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^<script[ >]|</head>))$STOP()"
Replace = "<script type='text/javascript'>\r\n"
          "function moveTo(){return true;} function resizeTo(){return true;}"
          "</script>\r\n"

HTML文書を読み終わった後にJavaScriptを挿入するフィルタ。

[Patterns]
Name = "Restore pop-ups after a page loads [2007/08/21] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^</head>))$STOP()"
Replace = "<script type='text/javascript'>\r\n"
          "function addLoadEvent(func) {"
          "	var oldonload = window.onload;"
          "	if (typeof window.onload != 'function') {"
          "		window.onload = func;"
          "	} else {"
          "		window.onload = function() {"
          "			oldonload();"
          "			func();"
          "		}"
          "	}"
          "}"
          "addLoadEvent(PrxRST); "
          "</script>\r\n"

2007/05/22時点の修正版では、ページ読み込み後にJavaScript実行するために、(^(^</html>)) を使っていましたが、これは </html> の後ろにJavaScriptを挿入するHTMLに対応できていませんでした。
今回は、addLoadEvent でこの問題を解消しています。
でも、今となっては「addLoadEvent」も古い書き方で、window.addEventListener を使う のが適切なのでしょうね。
今の書き方でも実用上問題はないはずなので、イベントリスナ系統をまとめて覚えた後に対応しようと考えています。

Proxomitron-Jで配布されている「Allow right mouse click 3種セット」の修正版。

[Patterns]
Name = "Allow right mouse click [2007/05/23] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 16
Match = ".(onmousedown=|captureEvents\()"
Replace = ".PrxOff_"

Name = "Allow right mouse click 2 [2007/08/21] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^</head>))$STOP()"
Replace = "<script type='text/javascript'>\r\n"
          "function addLoadEvent(func) {"
          "	var oldonload = window.onload;"
          "	if (typeof window.onload != 'function') {"
          "		window.onload = func;"
          "	} else {"
          "		window.onload = function() {"
          "			oldonload();"
          "			func();"
          "		}"
          "	}"
          "}"
          "function onMousedownNull(){"
          "	document.onmousedown=null;"
          "}"
          "addLoadEvent(onMousedownNull);"
          "</script>\r\n"

Name = "Allow right mouse click plus [2007/05/23] fixed"
Active = TRUE
Multi = TRUE
URL = "$TYPE(htm)"
Limit = 512
Match = "(<[^>]++\s)oncontextmenu(^(^=))"
Replace = "ProxAllow"

依頼を受けたフィルタを修正しており、デフォルトのフィルタ全てを修正してはいません。
元のフィルタと修正版を比較すれば、修正内容の見当は付くと思います。
でも、リクエストを受け付けないというわけではないので、要望があれば、順次対応していくつもりです。

ラベル: , ,

1 件のコメント:

Anonymous 匿名 さんは書きました...

あなたは本当に天才です

2007年8月25日 19:58  

コメントを投稿

登録 コメントの投稿 [Atom]

<< ホーム