2011-07-10 6 views
21

で働いていない私は、Firefox 6のアドレスバーに、このJavaScriptコードを実行してみました:JavaScriptの警告は、Firefox 6

javascript:alert("Hello") 

私はそれはしかしFirefoxの5で正常に動作するために使用

ReferenceError: alert not defined.

を取得しますOpera、Safari、Chromeで動作します。これをどうやって解決するのですか?

+0

どうすればよいですか? – Ryan

+0

@ライアン:あなたが私の答えでしたことを正確に行うことによって、あなたを最も助けた答えを受け入れます。あなたは古い質問に戻り、そうするべきです。 –

答えて

21

それは(直接アドレスバーに)javascript:data: URLを使用しているようだが、現在as per this comment許可されていません。

FYI, I'm probably going to split this bug into multiple, short and longer term fixes.

Short term: disallow pasting of javascript: URLs into the URL bar
Longer term: additionally require that bookmarklets be "whitelisted" in the Bookmark Manager before it can run JavaScript

そしてlatest versionで解決されましたthis is the "bug"last commentも述べている:今

javascript: is not actually ignored - they're run, but in an "empty" context that doesn't have any of the usual DOM methods you would expect, so most common uses (e.g. javascript:alert(1)) just throw (and thus are effectively ignored). javascript:1+1 works fine, though.

How do I fix this?

あなたは、あなたは彼らが適切な解決策を決定するまで待つことはできません。コメントによると、ブックマークレットは機能しますが、明示的に許可する必要があります。コードをテストするだけの場合は、Firebugまたは新しいScratchpadフィーチャーのいずれかを使用します。

+0

25秒以内に同じバグレポートを参照している2人の人物。 :D私はこれがより詳細なので私の答えを削除しました。 – Quentin

+3

この「バグ修正」は、私が取り組んでいた2ヶ月のプロジェクトをちょうど破壊しました。 : – GeReV

+7

@GeRevはブックマークレットの1つの地獄であったに違いない... –

10

URLバーのjavascript:がこれ以上動作しない理由をFelixの答えで正しく述べています。

この場合、ウェブページをデバッグしようとすると、Webコンソール(エラーコンソールと混同しないでください)が表示されます。コンパクトメニューでは、Web Developerの下にあります。フルメニューバーの[ツール]にあります。あるいは、Ctrl-Shift-K(Macではcmd-shift-K)を押すことができます。より大きい記号を含むバーはJavaScriptプロンプトです。そこに入力されたコードは、現在のページのコンテキストで評価されます。そのバーの上にある下線を引いた部分をクリックすると、インスペクタウィンドウが表示されます。

+1

+1 Webコンソール用...聞いたことがありますが、忘れていました;) –

+0

* *コマンド+ alt + K(Mac)悲しい一日、私はアドレスバーにJavaScriptを入力することを欠場するつもりです... –

1

クリック可能なブックマークレットが壊れていて、それを元に戻したい場合は、代わりにCustom Buttons Firefox拡張を使用して、ボタンをクリックするとクリック可能なボタンを作成できます。

スクラッチパッドから実行している以上のボタンの利点:

  • あなたが実際に保存ブックマークレット(ボタン)することができ、
  • あなたは素敵な独自のアイコンを持つことができます(一部の画像等のPNGファイルを作成しますそれをインポートして、新しいボタンダイアログ内でbase64_encodeします)。

ボタンはFirefoxのクロムレベルで実行されるため、拡張子は少し特殊ですので、彼らはもう少し特権(ブラウザのAPIと対話することができますが)だ、と何の1対1の対応はありません通常のJSとボタンコード(の間では少し調整が必要です)。より正確には、ボタンから見たdocumentwindowは期待していたものではありません。

(よりよいウィンドウを再定義していない;)しかし、あなたは、変数に「良い」windowdocumentを割り当てることができ、その後、代わりにこれらの変数に取り組む

ここ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.を配置する必要があり、そして地元theDocumentdocument/windowを置き換えます/ theWindowと動作しているようです。非常に複雑なケースでは完全にテストしていません。

ボタンを追加するには、すでにボタンがある場合はを右クリックし、[新しいボタンを追加...]を選択します。