Safariは.ico形式の画像を表示できますが、
AdobeAIRは表示できませんが、どちらも
WebKITを使用し
ます 。 サイトへのリンクの近くに
ファビコンを表示するのは非常に面倒ですが、これはできません。
完全ではありませんが、解決策を見つけました。 この
サービスを使用
してpngのWebサイトからfaviconを取得し、そこから応答を取得してローカルにキャッシュすることにしました。
air.URLLoaderを使用して画像をアップロードします。
この機能は判明しました:
関数getFavicon(url){
//ここでは、urlの文字列から必要な部分のみを引き出します-ドメイン名
var domain = id.match(/(\ w +):\ / \ /([^ \ /:] +)(:\ d *)?([^#] *)/ i);
if(domain!= null){
var domname = domain [2];
//キャッシュにそのようなアイコンがあるかどうかを確認します
var file = air.File.applicationStorageDirectory.resolvePath( "favicons /" + domname + '.png');
if(file.exists)
//そして、もしあれば、それへのリンクを返します
return file.url;
//ただし、そうでない場合、セクタープライムのヘルメット要求
var fav = "http://www.sectorprime.com/cgi-bin/fav2png.pl?fav=" + domname;
air.trace( 'ファビコンのロード' + domname);
var request = new air.URLRequest(fav);
var loader = new air.URLLoader </a>();
//重要! バイナリ形式でデータを受け取ります
loader.dataFormat = air.URLLoaderDataFormat.BINARY;
loader.addEventListener(air.Event.COMPLETE、関数(e){
//この関数は、リクエストに対する応答を受け取った直後に動作します
var loader = e.target;
//ファイルに書き込むストリームを作成します
var fileStream = new air.FileStream();
fileStream.open(file、air.FileMode.WRITE);
//そして、取得したすべてを書き込みます
fileStream.writeBytes(loader.data);
fileStream.close();
});
//実際には、起動プロセスを開始します
loader.load(リクエスト);
}
//ただし、このアイコンはデフォルトで表示されます
return "/images/icon_item.png";
}
初めて、アイコンを表示しませんが、ダウンロードを開始します。 次に関数が呼び出されると、アイコンはローカルキャッシュから取得されます(既にダウンロードされている場合)。 なぜすぐにしないのですか? -待機してスクリプトの実行を遅くしないために
アイコンキャッシュのクリアは、次のような方法で実行できます。
var favdir = air.File.applicationStorageDirectory.resolvePath( "favicons");
//そのようなフォルダが存在するかどうかを調べます
if((favdir.exists)&&(favdir.isDirectory))
//存在する場合は、コンテンツとともにフォルダを削除します
favdir.deleteDirectory(true);
このソリューションの欠点:
- アイコンはすぐには表示されません。
- このサービスは、ファビコンが利用できないサイトにある種の左矢印を提供します。
誰かが機能を改善するための提案を書いたら、コメントしてください。
個人的なブログからの
クロスポスト 。