ブックマークレット作成の基礎知識
基本フォーマット
ブックマークレットの先頭はjavascript:で始まります。URLになるので全体を1行で記述します
ブックマークレットの基本フォーマット javascript:(function(){ここにコードを記述する})();
ブックマークレット作成の注意点
ブックマークレットを作成するにあたっての一般的な注意点です
即時関数で囲む
ブックマークレットのコードはグローバル空間で実行されるので、サイトの空間とかぶってしまします。
名前がバッティングしないように即時関数内にコードを記述しましょう
undefined を返す
ブックマークレットのコードは undefined を返しましょう。 仮に true を返すブックマークレットを実行するとページが遷移してしまいます。 ブックマークレットではよく void(0); という記述を見かけますが、これは undefined を明示的に返しています
自作関数では何も返さないと undefined を返します。 return; とした場合も undefined が返ります
DOMを操作する場合は、DOM構築完了まで待つ
ブックマークレットからDOMを操作する場合、DOM構築完了以前にブックマークレットを実行するとバグって動きません。DOMが構築完了まで待つようにしましょう
DOMが構築完了してから関数f()を実行する (document.readyState=='loading')?document.addEventListener('DOMContentLoaded',f):f();
画像を操作する場合は、画像表示完了まで待つ
ブックマークレットから画像を操作したい時は、ページが完全に表示するまで待つ必要があります
ページが完全に表示されてから関数f()を実行する (document.readyState!='complete')?window.addEventListener('load',f):f();
コードの空白文字
ブックマークレットのコードに空白が入ってるとブックマークした時に %20 に変換されてしまいます。趣味の話ですが、これはかっこ悪いので阻止したいです。
//変数をローカル宣言すると空白が含まれてしまう function(){var a;} //引数で宣言してしまえば空白不要に function(a){}
同様の問題で "" という文字もブックマークレットでは '' を使用しましょう
ブックマークレット作成の注意点 その2
外部JavaScriptファイルを読み込むタイプのブックマークレットの注意点です
キャッシュ阻止
外部ファイルをブラウザにキャッシュされたくない場合は、読み込むURLに「?現在の時間」を付与します
'外部ファイルのURL'+'?'+Date.now()
https対策
https のサイトから http に設置した JavaScriptファイル を読み込もうとすると、セキュリティの問題で読み込めないことがあります。一番良い対策方法は、ファイル自体を https に置くことです。
「Google Drive」や「rawgit.com」などは https に対応しています
https に設置できない場合は、ブラウザの設定で対処できる場合があります。
IEの場合はインターネットオプションを開き、セキュリティ→ゾーン:インターネット→レベルのカスタマイズ→「混在したコンテンツを表示する」を有効にしてください
コンテンツセキュリティポリシー(CSP)
サイトによっては外部のJavaScriptが動作しないよう、サーバ側で設定してあるサイトもあります
content-security-policyヘッダのことです
この場合は外部JavaScriptを読み込むことができないので、動作させることはできません。