2011-02-11 33 views

回答

0

据据我所知,Safari不允许我们按照Chrome的方式创建一个“弹出窗口”。对于我的Safari扩展,我使用jQueryUI来创建我的弹出窗口。您也可以使用YUI或Mootools。在拆分eBay和Twitter扩展时,我发现他们使用的是iframe。只是他们如何实现它我不知道,因为jquery不允许你修改iframe的内容(纠正我,如果我在这里错了)。

但是要回答你的问题,你的按钮将发送一个事件给注入的脚本。该脚本可以具有类似于此的代码:

$('body').append('<div id="mypopup">'); 

var myPopup = $('#mypopup').dialog({ 
    'autoOpen' : false , 
    'draggable' : false, 
    'modal' : false, 
    'resizable' : false, 
    'title' : 'My Popup' 
}); 

function messageHandler(msgEvent) { 
    var messageName = msgEvent.name; 
    var messageData = msgEvent.message; 
    if (messageName === 'buttonPushed') { 
     if (myPopup.dialog('isOpen')) { 
      myPopup.dialog('close'); 
      return; 
     } 

     $('#mypopup').children().empty(); // Clear out any crap should it exist 
     $('#mypopup').append(someHTML); 
      myPopup.dialog('open'); 
      return; 
     } 
    } 
} 

这是一个非常基本的示例。在我的工具栏中,还有一些其他的东西。另外,您必须具有真正特定的CSS规则来保护您的弹出窗口的CSS不被世界上的每个站点破坏。

我也想过使用global.html来打开“弹出”窗口,但据我所知,它只能打开一个窗口。我没有看到用于设置大小等属性的任何工具。如果有,我会去那条路线,因为弹出窗口将被保护而不受CSS影响,因为它在它自己的窗口中。

3

阅读:http://net.tutsplus.com/tutorials/other/how-to-create-a-safari-extension-from-scratch/

它介绍了如何让当按下工具栏按钮事情发生,你只需把它放在这中间:

<script> 
// Set up the Listener 
safari.application.addEventListener("command", performCommand, false); 

// Function to perform when event is received 
function performCommand(event) { 
    // Make sure event comes from the button 
    if (event.command == "open-nettuts") { 


    **YOUR FUNCTION** 


    } 
} 
</script> 
+0

它实际上是综合了一些东西。稍后我会发布答案。 – Peter 2011-02-11 19:03:42

+0

有没有代码工作? – Charlie 2011-11-08 17:37:30

0

我觉得在Safari下它叫popover,那是什么意思?

两件事情,我注意到:

  1. 如果没有命令集(工具栏上的项目),将酥料饼单击工具栏按钮
  2. 时,如果有一个命令集,则自动显示用户需要点击并按保持按下工具栏按钮,直到弹出显示。