我想编写一个翻译用户选择文本的插件。但我停止了“获取所选文本”。我尝试了很多选项,但没有一个不起作用(可能是我的错)。
现在我的 global.html 如下所示:
<script >
// Set up Listener(s)
safari.application.addEventListener("command", performCommand, false);
// Functions to perform when event is received
function performCommand(event) {
if (event.command === "contextmenutranslate") {
alert("first");
alert(window.getSelection());
}
}
</script>
第二个警告返回空字符串。
我做错了什么?
我该怎么办?
答案 0 :(得分:4)
出于安全原因,全局页面无法直接与任何网页交互。因此,要从页面中获取选定的文本,您需要使用注入的脚本。然后,您可以使用messages在全局页面和注入的脚本之间进行通信。
例如:
safari.application.addEventListener('command', performCommand, false);
safari.application.addEventListener('message', handleMessage, false);
function performCommand(event) {
if (event.command === 'contextmenutranslate') {
safari.application.activeBrowserWindow.activeTab.page.dispatchMessage('getselection');
}
}
function handleMessage(msg) {
if (msg.name === 'theselection') {
alert(msg.message);
}
}
safari.self.addEventListener('message', handleMessage, false);
function handleMessage(msg) {
if (msg.name === 'getselection') {
var sel = window.getSelection()+'';
safari.self.tab.dispatchMessage('theselection', sel);
}
}
请记住在Safari Extension Builder中将inject.js设置为开始或结束脚本。