強調表示された選択を音声エンジン API に送信する Chrome 拡張機能を開発しています。コンテキストメニューとアイコンクリックの両方を実装したい。問題は次のとおりです。
これは完全に機能します:
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 だけです。