谷歌搜索了一段时间,看起来很简单,但我无法解决这个问题。我有一个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方面我是个新手。
答案 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]
}
);
}
}
答案 1 :(得分:-1)
你忘记了括号。尝试
if (window.getSelection())
{
window.alert("Does it enter if window.getselection");
sel=window.getSelection();
window.alert(sel);
}
由于函数getSelection
存在,window.getSelection
为真,无论window.getSelection()
返回什么。