2010-12-20 16 views
2

クロムのブラウザ履歴にポップアップページのブラウザアクションを使用してアクセスしようとしています。クロムアクセスのブラウザの履歴

var histories = []; 
var visits = []; 

chrome.history.search({'text':'', 'maxResults':0}, function(historyItems){ 
    for(var h in historyItems){ 
     histories.push({'id': h.id, 'url':h.url}); 
    } 
}); 

for(var h in histories){ 
    chrome.history.getVisits({'url': h.url, function(visitItems){ 
     for(var v in visitItems){ 
      var id = v.id; 
      var visitId = v.visitId; 
      var visitTime = v.visitTime; 
      var referringVisitId = v.referringVisitId; 
      var transition = v.transition; 
      visits.push({'id': v.id, 'visitId': v.visitId, 'visitTime': v.visitTime, 'referringVisitId': v.referringVisitId, 'transition':v.transition}); 
     } 
    }); 
} 

console.log(histories.length + ' histories'); 
console.log(visits.length + ' visits'); 

結果として、234回の履歴と0回の訪問があります。どのように訪問していないページがたくさんあるのですか? 私は何が間違っていますか?

+0

を与えるのだろうか?何がうまくいかない? –

+0

最初の2行はセミコロンを終了する必要があります – Yahel

+0

私は234履歴と0訪問を取得します。私は歴史よりももっと多くの訪問を期待していました。 – lowerkey

答えて

1

問題は、これはWebkit(chrome、safari e.a)内ではもう機能しません。それは不在(訪問をトラバース)は、任意のウェブサイトへの訪問されたリンクを公開するセキュリティバグを修正します。ランダムな推測では、プライバシー侵害とみなされた訪問者の追跡とプロファイルが可能でした。

+0

Mozillaのバグはここで読むことができます:http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/これは次回のfirefoxリリースでも実装されます。 – xiffy

+0

カスタム履歴ページを作成するにはどうすればいいですか?これはウェブサイトで実行するためにはサポートされていませんが、拡張機能で動作するはずです。そのため、マニフェストには「履歴」権限が必要です。そのため、ユーザーには権限が必要です。 – lowerkey

+0

mozillaバグはcss:visitedを記述していますが、history.getVisitsは同じ動作を示しますか? – lowerkey

1

ClickHintという拡張機能があり、訪問したサイトやページに関する統計情報を表示します。訪問数や各ページの所要時間などが表示されます。私が知る限り、これは、これからのポイント・フォワード・アプローチをとっています。拡張機能をインストールした後、有効になっている間だけ統計情報をコンパイルします。おそらく、この方法もあなたのために働くでしょう。

+0

情報ありがとうございます。特にgetVisits関数が好きだったのは、履歴ページがどのようにリンクされているか(ユーザーがページにアクセスするためにリンクをクリックしたかどうか)がわかるということでした。 – lowerkey

7

あなたのコードがうまくいかない理由は、chrome.historyの呼び出しの非同期性です。

実際には履歴[]を繰り返し実行しようとしていますが、chrome.history.searchが返されます。つまり、その時点の履歴[]はまだ空の配列です。最後のconsole.logは実際に0より多くの履歴を出力しますか?とにかく、この時点ではレースの状態です。

あなたがする必要があることは、chrome.history.searchのコールバック関数内でchrome.history.getVisitsを呼び出すことです。

ここでそれを行うための一つの方法です:

var histories = []; 
var visits = []; 

chrome.history.search({text:'', maxResults:0}, function(historyItems) { 
    var historiesProcessed = 0; 
    for (var i = 0; i < historyItems.length; i++) { 
     histories.push(historyItems[i]); 
     chrome.history.getVisits({url: historyItems[i].url}, function(visitItems) { 
      for (var i = 0; i < visitItems.length; i++) { 
       visits.push(visitItems[i]); 
      } 
      historiesProcessed++; 
      if (historiesProcessed === historyItems.length) { 
       console.log(visits.length + ' visits'); 
      } 
     }); 
    } 
    console.log(histories.length + ' histories'); 
}); 

それはきれいなコードではないのですが、それは動作し、あなたがより見やすくするためにそれをリファクタリングすることができます。

ポップアップページ内でchrome.historyにアクセスできるかどうかはわかりませんが(テスト時に教えてください)、確かにバックグラウンドページから機能し、結果をポップアップに渡すことができます。

0
chrome.history.search({ 
'text': '',    // Return every history item.... 
'startTime': oneWeekAgo // that was accessed less than one week ago. 
    }, 
    function(historyItems) { 
     console.log(historyItems); 
     document.write(JSON.stringify(historyItems)) 
    }); 

これはちょうど* *間違って起こっているvisitCount