2013-10-15 1 views
0

Привет Лучший коллега,Создать поповер в расширении сафари после щелчка контекстного меню

настоящее время им создать сафари и запустить закладка, к следующей задаче. Я создаю элемент контекстного меню и хочу вести себя следующим образом:

Если пользователь щелкает правой кнопкой мыши по ссылке на странице и нажимает на этот контекстный элемент, он должен получить атрибут href этой ссылки и открыть popover внутри там iframe.

Как я могу решить эту проблему?

Прямо сейчас я уже получаю атрибут href, но как я могу открыть popover?

мой endscript: default.js

document.addEventListener("contextmenu", handleContextMenu, false); 

function handleContextMenu(event){ 
    if(event.target.nodeName === "A"){ 
     var url = event.target.href; 
     safari.self.tab.setContextMenuEventUserInfo(event, url); 
    } 
} 

мой global.html

safari.application.addEventListener("command", performCommand, false); 

function performCommand(event) { 
if (event.command !== "DoAddSymbaloo") 
     return; 

     var u = event.userInfo; 

} 

Как я могу это исправить? Tnx заранее.

+0

Вы не сможете открыть ссылку в пирог, даже в IFRAME внутри него. Safari заблокирует его в соответствии с политикой безопасности. – canisbos

+0

@canisbos thats not correct it works on my i должен, возможно, протестировать его в Safari 5.0, но в 6 он работает. Или Apple должна заблокировать его, когда я его опубликую. – Navid

+0

Вы правы в том, что можно загружать веб-страницу в iframe внутри popover. Я не думаю, что это было возможно. – canisbos

ответ

3

Вы не сможете установить URL-адрес popover для веб-URL (он должен быть URL-адресом safari-extension), но вы можете иметь popover, который содержит ничего, кроме iframe, и сообщить загрузке popover URL-адрес в iframe.

Самый простой способ сделать это - прослушивание событий «команды» в самом popover (которое вы можете создать с помощью либо Builder расширения, либо API расширения, прочитайте the docs, если вам нужно обновить).

safari.application.addEventListener("command", function (evt) { 
    if (evt.command == 'DoAddSymbaloo') { 
     document.querySelector('iframe').src = evt.userInfo; 
     // now let's show the popover 
    } 
}, false); 

Теперь вы должны показать popover. Чтобы всплывающее окно стало видимым вообще, его необходимо привязать к элементу панели инструментов. Я предполагаю, что вы уже это сделали, используя либо Extension Builder, либо API. Способ отображения popware программно - использовать метод showPopover в элементе панели инструментов. Поэтому сначала вы должны найти элемент панели инструментов, к которому вы привязали popover. Из скрипта поповера в:

var myToolbarItem = safari.extension.toolbarItems.filter(function (ti) { 
    return ti.popover == safari.self; 
})[0]; 

Это просто говорит, «Найдите элемент панели инструментов, чью поповер таким же, как и я, и назначить этот элемент панели инструментов переменной myToolbarItem

Если вы хотите, и если popover будет прикрепляться только к одному элементу панели инструментов, вместо присвоения найденного элемента панели инструментов myToolbarItem вы можете установить его как свойство объекта popover, который с точки зрения popover является safari.self:

safari.self.toolbarItem = safari.extension.toolbarItems.filter(function (ti) { 
    return ti.popover == safari.self; 
})[0]; 

это обеспечит удобный способ получить элемент панели инструментов, связанный с пирогом из любой точки в сценарии или из глобальной страницы.

Теперь, комбинируя эти вещи:

safari.self.toolbarItem = safari.extension.toolbarItems.filter(function (ti) { 
    return ti.popover == safari.self; 
})[0]; 

safari.application.addEventListener("command", function (evt) { 
    if (evt.command == 'DoAddSymbaloo') { 
     document.querySelector('iframe').src = evt.userInfo; 
     safari.self.toolbarItem.showPopover(); 
    } 
}, false); 

(ред для облегчения окончательного сценария.)

+0

Большое спасибо, я попробую это :)! – Navid

+0

не работает, evt.userInfo имеет значение null. – Navid

+0

Уже решена проблема ... вроде глупо я забыл, что мне все еще нужен сценарий для инъекций :) – Navid

Смежные вопросы