我正在构建一个使用Google API翻译文本的应用。该应用程序运行良好,但是如果我尝试翻译使用外键På的单词,例如,API请求似乎忽略了“å”并以P的答案进行响应。所有非英语字母的单词都会发生这种情况。
为了使事情变得更加陌生,我构建了一个小型Web扩展程序,该扩展程序使用window.addEventListener
来捕获网页中的单词。使用此方法将单词发送到API不会造成问题。
这是有效的代码。内容脚本选择一个单词并将其发送到background.js。后台脚本使用该单词并将其发送到弹出窗口。在按钮上单击,将所选单词发送到Google API,然后将翻译发送回去。
内容脚本:
window.addEventListener('mouseup', checkWord);
function checkWord() {
let word = window.getSelection().toString();
console.log(word);
if(word.length > 0) {
let message = {
text: word,
}
chrome.runtime.sendMessage(word)
}
}
背景脚本:
chrome.runtime.onMessage.addListener(receiver);
function receiver(request, sender, sendResponse) {
console.log(request);
word = request;
}
最后,我的弹出页面功能在单击按钮时被调用:
function sendToAPI() {
let bgpage = chrome.extension.getBackgroundPage();
let word = bgpage.word;
console.log(word)
if(word.length> 0 && word.length< 100){
$.ajax({
type: 'GET',
url: `https://translation.googleapis.com/language/translate/v2?q=${word}&target=en&source=no&key=${API_KEY}`,
}).then(function(response) {
translated =response.data.translations[0].translatedText;
$('.word').empty();
$('.word').append(`${word} | ${translated}`);
return translated;
}).catch(function(err) {
sendReverse();
})
}
}
这是其他无效代码的一部分。 req.query.q
是粘贴到输入字段中的单词。另外,我可以删除`req.query.q并将单词直接粘贴到该空间中,并且API调用仍然无法正常工作。
//GET request to Google Translate API
router.get('/', (req,res)=>{
console.log(req.query);
axios.get(`https://translation.googleapis.com/language/translate/v2?q=${req.query.q}&target=${req.query.target}&source=${req.query.source}&key=${process.env.GOOGLE_API_KEY}`)
.then(response => {
if(req.query.q == response.data.data.translations[0].translatedText){
res.send('reverse')
} else {
console.log(response.data.data)
res.send(response.data)
}
}).catch(err=> {
console.log(err)
})
})
答案 0 :(得分:2)
您需要使用encodeURIComponent()
正确编码特殊字符,如下所示:
....?q=${encodeURIComponent(word)}....
或分开:
var encodedWord = encodeURIComponent(word);
//
....?q=${encodedWord}....