Вы не сможете установить 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);
(ред для облегчения окончательного сценария.)
Вы не сможете открыть ссылку в пирог, даже в IFRAME внутри него. Safari заблокирует его в соответствии с политикой безопасности. – canisbos
@canisbos thats not correct it works on my i должен, возможно, протестировать его в Safari 5.0, но в 6 он работает. Или Apple должна заблокировать его, когда я его опубликую. – Navid
Вы правы в том, что можно загружать веб-страницу в iframe внутри popover. Я не думаю, что это было возможно. – canisbos