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);
});

这是行不通的。

如果我将参数留空,它会返回一个说“未定义”的音频。所以我猜语音引擎告诉我它没有文本。我究竟做错了什么?

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

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 我不知道如何正确使用。

4

1 回答 1

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。

于 2013-07-15T09:44:40.143 回答