如何在safari扩展上获取所选文本?

时间:2013-04-09 13:37:38

标签: javascript safari safari-extension

我想编写一个翻译用户选择文本的插件。但我停止了“获取所选文本”。我尝试了很多选项,但没有一个不起作用(可能是我的错)。

现在我的 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>

第二个警告返回空字符串。
我做错了什么?
我该怎么办?

1 个答案:

答案 0 :(得分:4)

出于安全原因,全局页面无法直接与任何网页交互。因此,要从页面中获取选定的文本,您需要使用注入的脚本。然后,您可以使用messages在全局页面和注入的脚本之间进行通信。

例如:

global.js

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

injected.js

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设置为开始或结束脚本。