0

我正在开发一个Chrome扩展,它将突出显示的选项发送到语音引擎API。我想实现上下文菜单和图标点击。这里的问题:简单的浏览器操作说明请

这完美的作品:

chrome.contextMenus.create({ 
    "title" : "Speak Me", 
    "contexts" : ["selection"], 
    onclick: function (info, tab) { 
     speakMe(info.selectionText); 
    } 
}); 

直接在它下面,我有:

chrome.browserAction.onClicked.addListener(function() { 
    speakMe(info.selectionText); 
}); 

不工作。

如果我将参数保留为空,它会返回一个声音“Undefined”。所以我猜这个语音引擎告诉我它没有文字。我究竟做错了什么?

这是有问题的功能,上面摆放:

var speakMe = function (text) { 
     var key, lang, url, audio; 
     key = "key=12345678910"; 
     lang = "sv_se"; 
     url = "http://tts.engine.com/api/speak?" + key + "&lang=en_us&voice=male1&speed=100&audioformat=ogg&oggbitrate=100&text=" + text; 
     audio = new Audio(url); 
     audio.play(); 
    }; 

选择文本来自另一个JS文件:

function getSelectedText() { 
    var text = ""; 
    if (typeof window.getSelection != "undefined") { 
    text = window.getSelection().toString(); 
    } else if (typeof document.selection != "undefined" && document.selection.type == "Text") { 
    text = document.selection.createRange().text; 
    } 
    return text; 
} 

但由于上下文菜单中完美的作品,我不认为这有一个问题。这只是browserAction,我不知道如何正确使用。

回答

1

因为浏览器操作的onClicked事件没有关于所选文本的任何信息。你需要自己弄明白。您可以将内容脚本注入当前页面,并使用window.getSelection().toString()获取选定的文本。然后将该消息发回给该分机并说出文字。

下面是一个例子:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, 
     {code: 'window.getSelection().toString()'}, function(results) { 
    alert(results[0]); 
    }); 
}); 

它只是显示一个警告,但它很容易改变它打电话speakMe。

+0

嗨。我试图通过将它添加到popup.js中,但仍然没有。我不确定问题出在哪里。控制台什么都没显示,也许我做错了。我怎么去看看它失败的地方,一步一步地让我可以更好地告诉你这个问题。 – user19882

+0

首先,你把代码放在哪里?它应该在后台页面。 –

+0

这是它的背景页面。背景页面中的所有内容都能正常工作,除此之外。当我点击弹出图标时,警报不会触发。 – user19882