在Javascript中替换用户选择的文本

时间:2014-10-08 12:55:23

标签: javascript google-chrome-extension

谷歌搜索了一段时间,看起来很简单,但我无法解决这个问题。我有一个chrome扩展名,当你选择一些文本时,你右键单击并有一个按钮,它将对选择执行一些数学运算。但出于某种原因,我无法让选择出现在警报窗口中。

if (window.getSelection) 
{
    window.alert("Does it enter if window.getselection");
    sel=window.getSelection();
    window.alert(sel);
}

因此,它进入if语句,显示第一个警报,然后第二个警报为空。在试图解决这个问题时,我不知所措,感觉它会变得如此简单,以至于我错过了。另外,更换所选文本的最佳方法是什么?感谢。

编辑:你们想看看我的清单文件。

{
"name": "Convert",
"description": "lorem",
"version": "0.6",
"permissions": ["contextMenus", "tabs", "windows"],
"background": {
"scripts": ["conversion.js"]
},
"manifest_version": 2
}

我猜我在这里做错了什么,在Chrome Extnesions方面我是个新手。

2 个答案:

答案 0 :(得分:2)

您是Chrome扩展程序的初学者;因此,请查看Architecture Overview

如果你阅读它,你会回到开明的背景代码在一个单独的页面中运行,window引用它,不是当前打开和可见的选项卡。要访问它,通常需要某种形式的Content Script

但在开始实施内容脚本之前,让我们再看看context menu API

handler of a context menu click event接收一个info对象,其中包含selectionText,其中包含在调用上下文菜单时选择的文本。如果这就是您想要的(而不是完整的Selection对象),则根本不需要与页面进行交互:

function handleContext(info){
  if(info.selectionText) {
    // There was something selected, do stuff with it
  }
}

如果你需要完整的选择对象,这里是它的最小代码(需要activeTab权限):

function handleContext(info, tab){
  if(tab){
    chrome.tabs.executeScript(
      tab.id,
      {code : "window.getSelection();"},
      function(results) {
        // Do something with results[0]
      }
    );
  }
}

请参阅Programmatic InjectionexecuteScript docs以供参考。

答案 1 :(得分:-1)

你忘记了括号。尝试

if (window.getSelection()) 
{
    window.alert("Does it enter if window.getselection");
    sel=window.getSelection();
    window.alert(sel);
}

由于函数getSelection存在,window.getSelection为真,无论window.getSelection()返回什么。