如何在 Safari 应用程序扩展中获取活动选项卡?
Posted
技术标签:
【中文标题】如何在 Safari 应用程序扩展中获取活动选项卡?【英文标题】:How to get active tab in a Safari App Extension? 【发布时间】:2016-09-27 12:20:28 【问题描述】:当我按照 Apple 示例进行操作时,我总是得到一个 nil
activeTab
:
override func toolbarItemClicked(in window: SFSafariWindow)
// This method will be called when your toolbar item is clicked.
window.getActiveTab(completionHandler: (activeTab) in
print(activeTab)
activeTab?.getActivePage(completionHandler: (activePage) in
print(activePage)
activePage?.getPropertiesWithCompletionHandler( (properties) in
print(properties)
if properties?.url != nil
let urlString = properties!.url.absoluteString
print("URL!", urlString)
let videoURL = self.youtubeDl(urlString: urlString)
if videoURL != nil
window.openTab(with: videoURL!, makeActiveIfPossible: true, completionHandler: nil)
)
)
)
【问题讨论】:
【参考方案1】:是的,有一个 getActiveTab:
SFSafariApplication.getActiveWindow (window) in
window?.getActiveTab (tab) in
tab?.getActivePage(completionHandler: (page) in
【讨论】:
嗨,这个 getActiveTab 是异步方法吗?【参考方案2】:您的 Safari 应用程序扩展程序只能访问您的扩展程序配置访问的站点的选项卡。
在您的 Info.plist 中,验证 SFSafariWebsiteAccess dictionary:
Level 等于“Some”或“All”。
在 Allowed Domains 数组中列出了所有必需的域(如果 Level="Some")。
请注意,您的扩展程序的网站访问权限显示在 Safari > Preferences > Extensions 中。我们鼓励您将您的网站访问权限限制为“某些”(和明确的域),除非您确实需要访问每个网站。
【讨论】:
所以没有像activeTab
in WebExtension这样的东西?【参考方案3】:
您应该转到 info.plist,NSExtension->SFSafariWebsiteAccess
并将某些内容(例如 * - 适用于所有站点)设置为允许域。如果没有这个选项,我总是从窗口得到 nil。我认为如果该站点不允许,您的扩展程序将无法工作。
【讨论】:
以上是关于如何在 Safari 应用程序扩展中获取活动选项卡?的主要内容,如果未能解决你的问题,请参考以下文章
safari app extensions:从swift后台进程向所有选项卡广播消息