在谷歌浏览器扩展中获取网页的选定文本

Aak*_*thy 3 javascript clipboard google-chrome selection google-chrome-extension

我正在开发 Google Chrome 扩展程序。单击弹出窗口时,我希望 popup.html 文件中的输入框包含当前网页的选定文本。

示例文本框:

<input id="searchBox" type="text" />
Run Code Online (Sandbox Code Playgroud)

在网页中选择文本时,文本框应包含选定的单词。我试过,chrome.extension.getBackgroundPage().getSelection()但它不起作用。

tco*_*ooc 5

由于 Chrome 的极端安全预防措施,您想要做的事情需要大量编码。

chrome.extension.getBackgroundPage().getSelection()将不起作用,因为“BackgroundPage”不是当前网页。你需要类似的东西:

chrome.tabs.executeScript(null, {code:"alert(window.getSelection().toString());"})
//alerts the selected text
Run Code Online (Sandbox Code Playgroud)

然而,将该文本传输回弹出窗口是一个漫长且令人头疼的过程。如果您准备好迎接挑战,请阅读 内容脚本和扩展消息传递。

  • 是的。它使用了我向你展示的相同东西。脚本如下: `chrome.tabs.executeScript(null, {file:"script.js"});` 以及: `chrome.extension.onRequest.addListener( function(request, sender, sendResponse) { document.getElementById(" txtar").innerText=request.viewsource; });` 第一部分基本上是我向您展示的代码(脚本文件中除外),第二部分是消息传递。 (2认同)

Nic*_*ver 5

谷歌群组上有一个关于此的主题:如何从选择中获取 HTML 代码?

var selection = window.getSelection(); 
var range = selection.getRangeAt(0); 
if (range) { 
  var div = document.createElement('div'); 
  div.appendChild(range.cloneContents()); 
  alert(div.innerHTML); 
}
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都可以在控制台或插件中使用它。


Nad*_*sin 5

这是另一个以字符串形式获取所选文本的简单解决方案,您可以使用此字符串轻松地将 div 元素子元素附加到代码中:

              var text = '';
              if(window.getSelection){
                text = window.getSelection();
              }else if(document.getSelection){
                text = document.getSelection();
              }else if(document.selection){
                text = document.selection.createRange().text;
              }
              text=text.toString();
Run Code Online (Sandbox Code Playgroud)