- 使用Cocoa应用程序模板在Xcode 8.1上创建了一个新的Xcode项目(在macOS 10.12 Sierra上)
- 使用Safari Extension模板在应用程序中创建了一个新的目标
- 运行了一次应用程序,以确保构建了Safari应用程序扩展
- 在Safari的Develop菜单中选择“允许未签名扩展”选项
- 在Safari的扩展偏好设置面板中启用了扩展
扩展的工具栏按钮出现在Safari中。苹果的指南说当我点击工具栏按钮时,我应该在控制台中看到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控制台或Console应用程序中看到NSLog。
我是一个真正的Xcode新手,所以我肯定错过了一些显而易见的东西——但为什么NSLog消息不会出现在控制台中呢?
(我不以管理员身份运行,如果这有什么区别的话——尽管我第一次运行Xcode时输入了管理员帐户详细信息。我确实注意到,在Console应用程序中,当我选择system.log时,我只看到一条消息,上面写着“无法读取文件”。这可能与不以管理员身份运行有关。)