5

当我遵循 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)
                    }
                }
            })
        })
    })
}
4

3 回答 3

7

是的,有一个 getActiveTab:

SFSafariApplication.getActiveWindow { (window) in
    window?.getActiveTab { (tab) in 
        tab?.getActivePage(completionHandler: { (page) in
        }
    }
}
于 2018-09-26T14:38:37.073 回答
6

您的 Safari 应用程序扩展程序只能访问您的扩展程序配置访问的站点的选项卡。

在您的 Info.plist 中,验证SFSafariWebsiteAccess字典

  • 具有等于​​“部分”或“全部”的级别

  • 在Allowed Domains数组中列出了所有必需的域(如果 Level=" Some ")。

请注意,您的扩展程序的网站访问权限显示在Safari > Preferences > Extensions中。除非您确实需要访问每个网站,否则我们鼓励您限制您的网站访问“某些”(和明确的域)。

于 2016-09-29T20:07:36.143 回答
1

您应该转到 info.plist,NSExtension->SFSafariWebsiteAccess并将某些内容(例如 * - 所有站点)设置为允许域。如果没有这个选项,我总是从窗口得到 nil。我认为如果该站点不允许,您的扩展程序将不起作用。

于 2020-01-29T14:01:10.190 回答