我正在开发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);
});
哪个不起作用。
如果我将参数留空,则返回一个说“未定义”的音频。所以我猜语音引擎告诉我它没有文字。我做错了什么?
这是有问题的功能,放在上面:
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。
答案 0 :(得分: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。