Firefox 6 のアドレス バーで次の JavaScript コードを実行してみました。
javascript:alert("Hello")
私は得る
ReferenceError: アラートが定義されていません。
以前は Firefox 5 で問題なく動作していましたが、Opera、Safari、Chrome でも引き続き動作します。これを修正するにはどうすればよいですか?
Firefox 6 のアドレス バーで次の JavaScript コードを実行してみました。
javascript:alert("Hello")
私は得る
ReferenceError: アラートが定義されていません。
以前は Firefox 5 で問題なく動作していましたが、Opera、Safari、Chrome でも引き続き動作します。これを修正するにはどうすればよいですか?
を使用しているようjavascript:
で、data:
URL (アドレスバーに直接) は現在、このコメントに従って許可されていません:
参考までに、このバグを複数の短期および長期の修正に分割する予定です。
短期: JavaScript の貼り付けを禁止: URL バーへの URL
長期: JavaScript を実行する前に、ブックマーク マネージャーでブックマークレットを「ホワイトリストに登録」する必要があります
そして、これが最新版で解消された「バグ」です。最後のコメントには次のようにも記載されています。
javascript: は実際には無視されません - それらは実行されますが、期待される通常の DOM メソッドを持たない「空の」コンテキストで実行されるため、最も一般的な使用法 (例: javascript:alert(1)) は単に (したがって、事実上無視されます)。ただし、javascript:1+1 は問題なく動作します。
今:
これを修正するにはどうすればよいですか?
できません。彼らが適切な解決策を決定するまで待たなければなりません。コメントが言ったように、ブックマークレットは機能しますが、明示的に許可する必要があります。コードをテストするだけの場合は、Firebugまたは新しいScratchpad機能を使用してください。
javascript:
Felix の回答は、URL バーが機能しなくなった理由を正しく示しています。
Web ページをデバッグしようとしている場合、これに代わるものは Web コンソールです (エラー コンソールと混同しないでください)。コンパクト メニューでは、Web 開発者の下にあります。フル メニュー バーでは、[ツール] の下にあります。または、ctrl-shift-K (Mac では cmd-shift-K) を押すこともできます。大なり記号のバーは JavaScript プロンプトです。そこに入力されたコードは、現在のページのコンテキストで評価されます。バーの上にある下線付きの領域をクリックすると、インスペクタ ウィンドウが表示されます。
クリック可能なブックマークレットが壊れてしまい、元に戻したい場合は、代わりにカスタム ボタンFirefox 拡張機能を使用してクリック可能なボタンを作成できます。
Scratchpad からの実行に対するボタンの利点:
ボタンは Firefox のクロム レベルで実行されるため、この拡張機能は少し特別です。そのため、ボタンにはもう少し特権があり (ブラウザの API と対話できます)、通常の JS とボタン コードの間に 1 対 1 の対応はありません (微調整が必要です)。より正確には、ボタンdocument
からwindow
見たものは、あなたが期待していたものではありません。
ただし、「良い」window
とdocument
を変数に割り当てて、代わりにこれらの変数で作業することができます(ウィンドウを再定義しない方がよい;)
これは私が書いたサンプル コードで、Fx10 でうまく動作します。
// get proper 'window' and 'document' into our private variables
var theWindow = window.top.getBrowser().selectedBrowser.contentWindow;
var theDocument = theWindow.document;
// here we go
var input = theDocument.getElementById("foo");
input.focus(); // just to show you it's working, unnecessary in fact
// simulate keyboard event
var evt = theDocument.createEvent("KeyboardEvent");
evt.initKeyEvent ("keypress", true, true, theWindow ,
0, 0, 0, 0, 0, 65); // 65 == "A"
input.dispatchEvent(evt);
// show alert after 2 sec
theWindow.setTimeout( function(){
input.value += "B";
theWindow.alert(input.value); // alerts "AB"
},2000);
グローバル関数 ( setTimeout
、 または などalert
) を直接使用する代わりに、それらの前に置き、 /をローカル/theWindow.
に置き換える必要があります。これは機能しているようです。ただし、非常に複雑なケースでは完全にテストしていません。document
window
theDocument
theWindow
ボタンを追加するには、既にあるボタンを右クリックし、[新しいボタンを追加...] を選択します。