7

現在アクティブな Web ページから選択したテキストを localstorage に保存する拡張機能を作成しています。ユーザーが拡張機能のポップアップでこの選択したテキストをクリックすると、拡張機能は chrome.tabs.create を起動し、選択したテキストがあった Web サイトを開きます。選択されました。これらの機能は機能しますが、新しいタブが開いたときに「検索」機能をトリガーする方法がわかりません。新しく作成されたタブを、拡張機能が保存した選択したテキストに合わせたいと思います。これには2つの方法があると思います...

  1. どういうわけか、ブラウザがデフォルトで持っている「検索」機能をトリガーします。「Ctrl+F」または「Command+F」を使用したものがトリガーされ、選択したテキストがそこに挿入されます

  2. 選択したテキストを強調表示して、新しく作成したページの HTML を編集します。

new_source = { "url" : tab[0].url, "title" : tab[0].title, "quote" : selectedQuote, "id" : idSource};
sources.push(new_source);
localStorage["sources"] = JSON.stringify(sources);

これが私の情報を保存する方法です

4

1 に答える 1

4

Chromeのネイティブ検索ダイアログをトリガーすることはできませんが、を呼び出すことはできますwindow.find()。ネイティブダイアログとの主な違いfind()

  1. find()ネイティブダイアログではすべてが強調表示されるのに対し、ページ内の一致の1つのみが強調表示されます。正確にfind()は、ドキュメントの上部に最も近い一致を強調表示することから始め、繰り返し呼び出すとページの下に移動します。

  2. find()選択したテキストがデフォルトの青色で強調表示されますが、Chromeの検索ダイアログでは一致するテキストがオレンジ色で強調表示されます。ただし、これは、疑似クラスのbackgroundCSSプロパティを変更することで模倣できます。::selection

ユースケースによっては、これで十分な場合があります。

ただし、ページ上の特定の引用を強調表示し、その引用の重複の可能性を考慮する必要がある場合は、少し注意が必要です。完全に実行できるかどうかはわかりません。を使用して選択したテキストの正確な場所を取得し、そのテキストとページ全体のリロードwindow.getSelection()を識別する方法を見つけます(IDがある場合、これは簡単ですが、そうでない場合はハックに頼る必要があります)。ページを再度開いたら、を使用してページを復元します。startNodeendNodeSelection.addRange()

于 2012-12-05T01:29:40.703 に答える