0

Chromeの最近の更新後、古いアプリ(ブックマークマネージャー)を使用していますが、動作を停止しました。具体的には、サムネイルのスクリーンショットを撮る部分が機能していません。エラーメッセージは

「tabs.captureVisibleTab中のエラー:URL「chrome:// newtab /#20」のコンテンツにアクセスできません。拡張機能マニフェストは、このホストにアクセスするためのアクセス許可を要求する必要があります。」

私が知る限り、tabs.captureVisibleTabは動作しないはずです

クロム://

タブなど。

これがmanifest.jsonの権限です。

"permissions": [ "storage","bookmarks", "tabs", "history", "management", "unlimitedStorage", "chrome://favicon/", "http://*/*", "https://*/*","<all_urls>", "contextMenus", "notifications" ],

そして、これがページの読み込み時にサムネイルをトリガーする関数です

    function getThumbnail(url, showInfoWarning) {
    chrome.tabs.getSelected( null,function(tab) { 
      speeddial.storage.removeThumbnail(url);
        localStorage['requestThumbnail'] = tab.id+'|||'+url; 
        openInCurrent(url); 
    }); 
}

function makeThumbnail(url,captureDelay) {
setTimeout(function() 
{
    chrome.tabs.captureVisibleTab(null,{format:'png'},function(dataurl)
    {
        var canvas = document.createElementNS( "http://www.w3.org/1999/xhtml", "html:canvas" );
        var ctx = canvas.getContext('2d');      
        var img = document.createElement('img');
        img.onload = function()
        {
            try
            {
                resized_width = 480; 
                quality = 0.72;

                if          (localStorage['options.thumbnailQuality']=='low')       { resized_width = 360; quality = 0.75;  }
                if          (localStorage['options.thumbnailQuality']=='high')      { resized_width = 720; quality = 0.65;  }

                resized_height =  Math.ceil((resized_width/img.width)*img.height);
                canvas.width=resized_width
                canvas.height=resized_height
                ctx.drawImage(img,0,0,resized_width,resized_height);

                localStorage.setItem(url, dataurl);
      // SPEED DIAL DB 
      // var speeddialdb = {};
      // speeddialdb.storage = {};
      // speeddialdb.storage.db = null;
      // var dbSize = 1 * 1024 * 1024; // 2MB
      // speeddialdb.storage.db = null;
      // speeddialdb.storage.db = openDatabase('bookmarks', '1.0', 'Speeddial2', dbSize);

      // speeddialdb.storage.db.transaction(function(tx) {
      //   tx.executeSql('DELETE FROM thumbnails WHERE url = ?', [url],function(){
      //     tx.executeSql('INSERT INTO thumbnails (url, thumbnail) values (?, ?)', [url, canvas.toDataURL("image/jpeg",quality)], null ,function(tx, e){alert('Something unexpected happened: ' + e.message ) });  
      //   });
      // });
            }
            catch(e){console.log(e)}            
        }
        img.src=dataurl;
    });
}, captureDelay);
}

chrome.tabs.onUpdated.addListener(function(id,object,tab) {
    if (tab.selected && tab.url) {
        if (localStorage['requestThumbnail']!='' && localStorage['requestThumbnail']!="undefined" && typeof localStorage["requestThumbnail"]!='undefined') {
      var requestThumbnail = localStorage['requestThumbnail'].split('|||');

      if (requestThumbnail[0] == tab.id) { 
        if ( tab.status=="complete" ) { 
            if (tab.url.indexOf('mail.google.com')>-1 || tab.url.indexOf('twitter.com')>-1) 
            {
                makeThumbnail(requestThumbnail[1],1000); 
            } else {
                makeThumbnail(requestThumbnail[1],500); 
            }
            localStorage['requestThumbnail']='';
        }
        requestThumbnail = null;
      }

    } 
    }
});

問題-ほとんどの場合、コンソールはこのエラーメッセージをトリガーします。ブルームーンに入ると、コードは実際にサムネイルを取得します。私が知る限り、tabs.captureVisibleTabは意図した前にトリガーします。

私は、コードの直接修正(より良い)またはそれをより信頼できるものにする方法の一般的な方向性の両方で有効な答えを検討します。

私のシステム-Ubuntu12.04、Chrome 24.0.1312.70

4

1 に答える 1

1
  • chrome.tabs.getSelected代わりに chrome.tabs.query を使用してください。
  • 明示的な null 宣言は必要ありません。chrome.tabs.captureVisibleTab(nullデフォルトはcurrent windowです。

参照

于 2013-02-21T10:23:19.427 に答える