Internet Explorer 11のブックマークレット:ストレージ形式、制限と暗黙のルール、潜んでいるバグ

Google ChromeとFirefoxで実行されている2つのブックマークレットがInternet Explorer 11での動作をすぐに拒否し、コンソールにエラーメッセージが表示されず、生活の兆候もまったく表示されなかった後、私は何が起こっているのか理解し始めました。



最初は、URLの長さ、つまりブックマークレットの長さに制限があると判断しました。 IE 7では、制限は2083文字でしたが、IE 11では、実験者が確認したように、制限が増加しました。 この国境が現在何であるかを経験的に知る必要がありました。



しかし、最初に、小さな紹介。



Google ChromeはブックマークをJSON、Firefox-sqliteデータベースに保存します。 したがって、ブックマークの名前は任意です。 IEは、たとえば、%userprofile%\ Favorites \ Linksフォルダに各ブックマークを個別のファイルとして保存します。 そのため、ブラウザーはブックマークの名前を調整して、ファイルシステムの標準に合うようにします(たとえば、疑問符を置き換えます)。 したがって、IEでは、同じフォルダに同じ名前の2つのブックマークを置くことはできませんが、Google ChromeとFirefoxではそれらにブックマークを付けることができます(それらのブックマークは、サイトアイコンまたは標準の代替物のみで、名前がまったくなくてもかまいません)。



Google ChromeおよびFirefoxでは、ブックマークレットコードを含む適切なフィールドに名前とURLを入力することにより、最初からブックマークを作成できます。 同時に、Google ChromeとFirefoxはコード内の改行を削除し、空白で異なる処理を行います。最初の構文では、構文が許す限り、それらを部分的に削除し、部分的に残します。 2番目は、encodeURI()およびencodeURIComponent()関数が行うように、空白を%20文字に変換します。 作成後、両方のブラウザで通常のブックマークとブックマークレットの両方を編集できます。



IEでは、お気に入りパネルにリンクをドラッグするだけでブックマークレットを追加できます。 ブラウザー自体でブックマークを作成した後にコードを編集することはできなくなりました(ブラウザーで表示することさえできません。ツールチップには先頭のみが表示され、ブックマークプロパティを呼び出すと、URLまたはコードのフィールドがないウィンドウが開きます)。 ただし、回避策があります。上記のフォルダ内のブックマークファイルを編集できます。



これらのファイルの拡張子は.urlで、形式は.ini構成のテキストファイルと同じです。 IE 11のファイルに保存された簡単なブックマークレットの例を次に示します。



  [{000214A0-0000-0000-C000-000000000046}]
プロップ3 = 19.15
 [インターネットショートカット]
 URL = javascript:(function(){alert( 'Hello、world!');})()
 IDList =
 [しおり]
 ExtendedURL = javascript:(function(){alert( 'Hello、world!');})() 




この空白はテンプレートとして使用できます。その中のコードの両方の行を置き換え、前述のフォルダーに有効なファイル名で保存すると、新しいブックマークレットがお気に入りパネルに表示されます。 その際、この機能を考慮する必要があります。IEは、ウィンドウまたはタブを開くときにブックマークを1回読み取ります。 ファイルを編集しても、ウィンドウまたはタブは古いバージョンで動作します。 ウィンドウを閉じて再度開くか、新しいタブを開くと、ファイルの変更が有効になります。 そのため、各タブを開く前にファイルを編集した場合、5つの異なるタブで同じブックマークをクリックすると、5つの異なる結果が生成される場合があります。 IEは実行中のプロセスを保存するという事実によって混乱が悪化しています。タブを閉じると、IEは子プロセスをメモリに残して、別のタブを開くときに使用します。 したがって、ブックマークレットのコードをテストしてファイルを直接編集する場合は、1つのウィンドウを再起動するか、以前のタブを閉じずに新しいタブを開きます(おそらくコンソールを使用する方が簡単です)。



今、ファイル形式について、またはむしろ私たちに興味のある部分について。 ご覧のとおり、URLまたはブックマークレットコードは2つの重複キーに格納されています。 しかし、それらの間には違いと関係の両方があります。 実験的に、次のルールを見つけることができました。



1.キー制限URL



= 2083文字。 キー制限ExtendedURL



= 5119文字。

2. 2083文字を超えるブックマークレットコードを使用すると、IE URL



キーの値を
2083文字で正確に分割し、他のすべてを機械的に切断します。 彼は明らかに作業コードを2番目のキーからのみ取得します。

3. 5119文字を超えるブックマークレットコードの場合、IE はキーに URL



2083文字を残し、 ExtendedURL



はキーにコード全体を残します
。 このようなブックマークをお気に入りに追加すると、ユーザーに警告発行されず、ブックマークレットは機能しなくなり、起動に失敗してもコンソールにエラーメッセージは表示されません。

4.大きなコードでは、両方のキーの最初の2083文字が文字の前に一致する必要があります。 それらが少なくとも1文字異なる場合、または最初のキーが少なくとも2082文字である場合、ブックマークレットは機能しません。



これらの規範を明確にした後、非稼働のブックマークレットのコンプライアンスをチェックしました。 違反はありませんでした。 それらは、長さが3,000文字を超えていました;ファイル内のすべてのフォーマットルールに従いました。



どうやら、さまざまなオプションとコードのサイズを確認する必要があります。おそらく、まだ隠されたルールが残っていると思います。 または、 try-catch



できないエラーがあり、 try-catch



を挿入する必要があります。 一般に、予測できない数のテストに備えます。



そして、私は両方のファイルが1つの奇妙な詳細で奇妙な類似性を持っていることに気付きました。 両方で、URLキー値はスペースで終了しました。 このIEが行の最後にスペースを挿入した理由に、私はさらに驚いた。 しかし、よく見てみると、IEには何も挿入されていないことに気付きました。 面白い偶然の一致により、ブックマークレットの両方のコードには2083文字のスペースがありました。 そして、それがどれほどひどいのか、私は予想を保存しました。それはすぐにテストで正当化されました。 IE 11のブックマークレットルールをもう1つ定式化する必要がありましたが、これは実際にはルールではなくバグです。



5.ブックマークレットコードに2083文字の代わりにスペースが含まれているため、スペースがURL



キーの最後の文字である場合、そのようなブックマークレットは機能しません。 リストされているルール違反と同様に、ユーザーは予備の警告や後続のエラーメッセージを受け取りません。



これらすべてから、IE 11のブックマークレットを作成するための少なくとも2つのヒントが続きます。



-5119文字の文字制限を確認してください。

-2083文字のスペースがないことを確認するか、スペースを最大にクリアするか、関数を使用してjavascript:URLをエンコードするか、Firefoxブックマークから貼り付けます。



最後に、説明を確認したい人のために、しきい値キーサイズの.urlファイルの例を示します。



test.url
 [{000214A0-0000-0000-C000-000000000046}]
プロップ3 = 19.15
 [インターネットショートカット]
 URL =ジャバスクリプト:(関数(){アラート(「123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456  789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456  789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123
 IDList =
 [しおり]
 ExtendedURL =ジャバスクリプト:(関数(){アラート(「123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678  9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678  9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678  9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678  9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12345678  9 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 12 ');)()




これが作業ブックマークレットコードです。 次の場合は動作しなくなります。



-少なくとも一方のキーまたは両方のキーを増やします(同じ文字でも)。

-最初のキーを少なくとも1文字減らす。

-別のキーの同じ文字をまったく変更せずに、キーの1つで少なくとも1つの文字を置き換えます。

-両方のキーの2083文字をスペースに置き換えます(最初のキーでは、これが最後の文字、2番目のキーでは、行の中央にある文字の1つです)。



それは誰かの時間と健康を保つことを望んで書かれました。



この疑わしい動作(Firefoxの場合はbugzilla.mozilla.org 、Google Chromeの場合はcode.google.com/p/chromium/issues/listなど)についてメッセージを送信する意味があるサイトを誰かが知っている場合は、報告してください。 ご清聴ありがとうございました。



All Articles