0

メタ要素の値を prompt() に表示するための簡単なブックマークレットがあります。それは機能しますが、ウィンドウを実行した後、文字列「null」またはプロンプト値のみがロードされます。

ブックマークレットがページの読み込みを引き起こさないようにするにはどうすればよいですか?

スクリプトにプロンプ​​トを表示させたいだけで、それ以上は何もしません。

私のブックマーケットはこれです:

javascript:var%20description;var%20metas=document.getElementsByTagName('meta');for(var%20x=0,y=metas.length;x<y;x++){if(metas[x].name.toLowerCase()=="description"){description=metas[x];}}prompt("Meta%20Description",description.content);

.. アンラップすると、次のようになります。

var description;
var metas=document.getElementsByTagName('meta');
for(var x=0,y=metas.length;x<y;x++){
    if(metas[x].name.toLowerCase()=="description"){
        description=metas[x];
    }
}
prompt("Meta Description",description.content);
4

2 に答える 2

4

最近受け入れられている方法は、次のように「すぐに呼び出される関数式」でコードをラップすることです

(function(){ /*your code */})();

void(0);コードを関数でラップすると、ブックマークレットと親 HTML ドキュメントのスコープ内の名前付き変数と関数の間の競合が防止されるため、これは末尾に追加するよりも優れています。

つまり、既存の変数「説明」を持つ JavaScript コードを使用する Web ページで、ブックマークレットをそのまま実行すると、問題が発生する可能性があります。

于 2012-12-10T08:20:53.180 に答える
2

void(0);最後に追加します。

javascript:var%20description;var%20metas=document.getElementsByTagName('meta');for(var%20x=0,y=metas.length;x<y;x++){if(metas[x].name.toLowerCase()=="description"){description=metas[x];}}prompt("Meta%20Description",description.content);void(0);
于 2012-12-10T06:28:07.820 に答える