我正在按照Apple 的指南创建 Safari App Extension。简而言之,我有:
- 使用 Cocoa Application 模板创建了一个新的 Xcode 项目(在 Xcode 8.1 中,在 macOS 10.12 Sierra 上)
- 使用 Safari 扩展模板在应用程序中创建了一个新目标
- 运行应用程序一次,以确保构建 Safari 应用程序扩展
- 在 Safari 的开发菜单中选择了“允许未签名的扩展”选项
- 在 Safari 的扩展首选项窗格中启用扩展
扩展的工具栏按钮出现在 Safari 中。Apple 的指南说,当我单击工具栏按钮时,我应该在控制台中看到 NSLog 消息,但我什么也没看到。
我编辑了 SafariExtensionHandler.swift 以向扩展注入的脚本发送消息:
override func toolbarItemClicked(in window: SFSafariWindow) {
// This method will be called when your toolbar item is clicked.
NSLog("The extension's toolbar item was clicked")
window.getActiveTab(completionHandler: { (activeTab) in
activeTab?.getActivePage(completionHandler: { (activePage) in
activePage?.dispatchMessageToScript(withName: "toolbarItemClicked", userInfo: nil)
})
})
}
我编辑了注入的脚本 (script.js) 来提醒该消息:
safari.self.addEventListener("message", function (event) {
alert("We got a message from the extension! - " + event.name + ": " + event.message);
});
当我单击工具栏按钮时会出现警报(当我在 webkit.org 上的页面上时,因为我已经离开了默认的 SFSafariWebsiteAccess 设置),因此扩展程序正在工作并注册单击。但我在 Xcode 的控制台或控制台应用程序中看不到 NSLog。
我是一个真正的 Xcode 新手,所以我确定我遗漏了一些明显的东西——但为什么 NSLog 消息没有出现在控制台中?
(我不会以管理员身份运行,以防万一——尽管我确实在第一次运行 Xcode 时被要求输入管理员帐户详细信息。我确实注意到在控制台应用程序中,当我选择system.log,我只看到一条消息“无法读取文件”。这可能与未以管理员身份运行有关。)