AdobeAIRでファビコンサイトを取得して表示する

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); 




このソリューションの欠点:





誰かが機能を改善するための提案を書いたら、コメントしてください。



個人的なブログからのクロスポスト



All Articles