2009-06-23 12 views
9

Firefoxで使用するカスタム.pacスクリプトを作成しています。私が見た多くの例に続いて、私はそれをデバッグするためにalert()を散りばめますが、スクリプトがはっきりと呼び出されているにもかかわらず警告ポップアップは表示されません。 (私は、スクリプトを変更するたびに "接続設定"の "リロード"をクリックしています。Firefoxを再起動しようとしました。)alert()を使用して自動プロキシ(PAC)JavaScriptをデバッグしますか?

アラートはPACスクリプトで動作するはずですか?おそらくこれはIE専用の機能ですか?

答えて

9

http://mxr.mozilla.org/mozilla-central/source/netwerk/base/src/nsProxyAutoConfig.js

のアラート機能をサンドボックスに追加されます。

80   // add predefined functions to pac 
81   this._sandBox.importFunction(myIpAddress); 
82   this._sandBox.importFunction(dnsResolve); 
83   this._sandBox.importFunction(proxyAlert, "alert"); 

そして、マップされた関数は、エラーコンソールに行くダンプを呼び出します:

108 function proxyAlert(msg) { 
109  msg = XPCSafeJSObjectWrapper(msg); 
110  try { 
111   // It would appear that the console service is threadsafe. 
112   var cns = Components.classes["@mozilla.org/consoleservice;1"] 
113        .getService(Components.interfaces.nsIConsoleService); 
114   cns.logStringMessage("PAC-alert: "+msg); 
115  } catch (e) { 
116   dump("PAC: proxyAlert ERROR: "+e+"\n"); 
117  } 
+0

興味深い。私はなぜ彼らが一方的にアラートをログダンプに変換するのだろうかと思います。私は、このような低レベルの操作中にポップアラートが受け入れられないと考えていると思います。 –

+0

うん。それは仕様ではなく、私が見つけたPACバグにはありません(Netscape/AOL/MozillaのProxyとPACをテストしました)。私はchangelogを掘り起こすことができます... – benc

+1

alert()はおそらくWindowオブジェクトを必要とし、ネットワークレベルの操作であり、確かにWindowオブジェクトはありません。 PACスクリプトは、我々がどのように接続するかを決める手助けをしているので、まだTCP接続さえありません... –

1

Windowsのレジストリで "EnableAutoproxyResultCache"を無効にする必要があります。 。 。

+1

http://support.microsoft.com/kb/271361によると、これはIEの機能です。そのキーはレジストリ内のどこにも表示されず、Firefoxに影響するかどうかは疑問です。 –

3

Ah Ha!警告メッセージがコンソールに記録されています。私は実際には、とにかくポップアップを警告することを好む。

0
  1. 使用.pacファイルのalert機能

    • Firefoxのブラウザ:

      ツール - >Web開発者 - >ブラウザコンソール(Ctrlキー+ Shiftキー+ J) [これではありませんWebコンソール !! ] - >フィルタ出力:PAC-alert

    • クロムブラウザ:

      chrome://net-internals/#events - >の記述を持つレコードを検索:PAC_JAVASCRIPT_ALERT

      (この回答のためにクロームのおかげについて:https://serverfault.com/a/738871


サンプル.pacファイル:

function FindProxyForURL(url, host) { 
    alert("url = " + url + " *** host = " + host + " *** Resolved IP = " + dnsResolve(host)); 

    return "DIRECT"; 
} 
+0

正しいリンクはchrome:// net-internals /#eventsです。 – claya

+0

@clayaリンクは正しいです。しかし、それをクリックすると、あなたのブラウザはおそらく、編集されたリンクを読み込もうとします。 **コピーして**アドレスバーに貼り付けるだけです。 –

関連する問題