7

我正在制作一个扩展程序,将当前活动网页中的选定文本存储到本地存储中,然后当用户在我的扩展程序弹出窗口中单击此选定文本时,扩展程序将触发 chrome.tabs.create 并打开选定文本所在的网站选择。这些功能有效,但我不知道如何在新标签打开时触发“查找”功能。我希望新创建的选项卡高度选择我的扩展存储的文本。我认为有两种方法可以做到这一点......

  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()仅突出显示页面中的一个匹配项,而本机对话框突出显示所有匹配项。准确地说,find()将首先突出显示最接近文档顶部的匹配项,重复调用会将其移到页面下方。

  2. find()将以默认的蓝色突出显示所选文本,而 Chrome 的查找对话框以橙色突出显示其匹配项。然而,这可以通过修改伪类的backgroundCSS 属性来模仿。::selection

根据您的用例,这可能就足够了。

但是,如果您想在页面上突出显示特定的引用,并且需要考虑该引用的可能重复项,那么这有点棘手,我不确定它是否可以完美地完成。您需要使用 获取所选文本的精确位置window.getSelection(),找到一种方法来识别其startNodeendNode跨页面重新加载(如果它们有 id,这很容易,但如果没有,您将不得不求助于黑客),然后当页面重新打开时,使用Selection.addRange()来恢复它。

于 2012-12-05T01:29:40.703 回答