我想编写一个翻译用户选择的文本的插件。但我在“获取所选文本”上停滞不前。我尝试了很多选择,但没有一个不起作用(可能是我的错)。
现在我的 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>
第二个警报返回空字符串。
我做错了什么?
我该怎么办?
最佳答案
出于安全原因,全局页面无法直接与任何网页交互。因此,要从页面获取选定的文本,您需要使用注入(inject)的脚本。然后您可以使用 messages在全局页面和注入(inject)的脚本之间进行通信。
例如:
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);
}
}
注入(inject).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 中将injected.js 设置为开始或结束脚本。
关于javascript - 如何在 safari 扩展上获取选定的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903488/