【问题标题】:Safari 5.1 extension development error -> event.userInfo returns null when it try to get selected textSafari 5.1 扩展开发错误-> event.userInfo 在尝试获取选定文本时返回 null
【发布时间】: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


【解决方案1】:

这可能是由于扩展生成器中的“访问级别”设置过于严格。尝试将下拉菜单设置为“全部”,然后勾选“包含安全页面”复选框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2017-07-17
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多