【发布时间】:2012-12-13 04:11:14
【问题描述】:
我正在尝试创建一个简单的 Safari 扩展程序。我当前的 Safari 版本是 5.1.7,在 Snow Leopard 中运行。
我有 2 个文件:
global.html
<!DOCTYPE HTML>
<script>
safari.application.addEventListener("command", performCommand, false);
function performCommand(event) {
if (event.command === "traducir") {
var query = event.userInfo;
alert(query);
query = query.replace(/\s+/g,"+");
var newTab = safari.application.activeBrowserWindow.openTab();
newTab.url = "http://translate.google.es/#en/es/" + query ;
}
}
</script>
和注入脚本:injected.js
document.addEventListener("contextmenu", handleMessage, false);
function handleMessage(msgEvent) {
var sel = '';
sel = window.parent.getSelection()+'';
sel = sel.replace(/^\s+|\s+$/g,"");
safari.self.tab.setContextMenuEventUserInfo(msgEvent, sel);
}
扩展很简单:
1-当用户选择一个文本或单词时,单击右键并选择上下文菜单的项目,该项目会引发该功能。
2- 注入文件获取选中文本的值,并通过userInfo与global.html共享。
3- global.html 脚本打开一个带有谷歌翻译网址的新标签。
问题是 event.userInfo 总是 NULL。我在谷歌搜索,所有的例子都是这样的,我不知道问题出在哪里,为什么它总是返回 NULL。
【问题讨论】:
-
您的代码对我有用。您是否对“文件:”URL 进行了测试?请注意,扩展脚本不会注入带有“file:”URL 的文档中。顺便问一下,你为什么用
window.parent.getSelection而不是window.getSelection?如果选定的文本在 iframe 中,这将不起作用。 -
P.S.-- 我在 OS X 10.8.2 上使用 Safari 6.0.1,但我不知道 Safari 5.1.x 中存在任何相关错误。
-
抱歉,我不明白“请注意,扩展脚本不会注入到带有“file:”URL 的文档中。”在这种情况下。我有 2 个文档:global.html 和 injection.js,在 safari 的开发扩展编辑器中,在“START SCRIPTS”选项卡中,我选择了位于同一文件夹中的“injected.js”。
-
我只是说你应该在一个真实的网页上进行测试——你可能正在这样做——而不是在一个 URL 像“file:///Users/Pete/Documents”的页面上/test.html”。如果您在文件 URL 上进行测试,则不会注入注入的脚本。
标签: safari-extension