完全ではありませんが、解決策を見つけました。 このサービスを使用して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);
このソリューションの欠点:
- アイコンはすぐには表示されません。
- このサービスは、ファビコンが利用できないサイトにある種の左矢印を提供します。
誰かが機能を改善するための提案を書いたら、コメントしてください。
個人的なブログからのクロスポスト 。