4

私は現在、Chromeの小さな拡張機能に取り組んでいます。拡張機能には同じwebsqlデータベースが必要ですが、作成場所に基づいて異なるデータベースを取得します。

コンテンツページでデータベースを作成すると、ユーザーがいる特定のページ用にデータベースが作成されます。

バックグラウンドページでデータベースを作成すると、拡張機能自体のデータベースを取得します。ただし、コンテンツページには表示されません。

不格好なメッセージパッシングメカニズムに頼ることなく、コンテンツページからEXTENSIONのデータベースにアクセスできればいいのにと思います。それを行う方法はありますか?

4

1 に答える 1

2

これは不可能です。と同じですlocalStorage。異なるスクリプトは異なるコンテキストを表します。

ただし、すべての拡張スクリプトはバックグラウンドページと通信できます。バックグラウンドページでデータベースへのプロキシAPIを作成してみてください。これは十分に単純なはずです。

私はそれを次のように実装します(コンテンツスクリプト):

chrome.extension.sendRequest({
      method: 'executeSql', 
      sql: 'SELECT title, author FROM docs WHERE id=?',
      params: [10]
   },
   function(response) {
      //do stuff
   }
); 

もう一方の端(背景ページ):

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    console.log(request);

    if(request.method == 'executeSql' && request.sql) {
        db.readTransaction(function (t) {
            t.executeSql(request.sql, request.params, function (t, r) {
               //send result with sendResponse
            }, function (t, e) {
               //send error with sendResponse
            });
        });
    } else if(...) { //some other method etc.
    } ...
}

上記のコードはテストされていません。単なるスケッチです。

于 2012-06-14T12:12:39.017 に答える