为什么 属性 类型的 SFSafariPage 变为 nil?
Why property of type SFSafariPage become nil?
SFSafariPage 属性 像这样获取它的值
class SafariExtensionHandler: SFSafariExtensionHandler {
var somePage: SFSafariPage?
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
// This method will be called when a content script provided by your extension calls safari.extension.dispatchMessage("message").
if messageName == "script injected successfully" {
somePage = page
NSLog(String(describing: somePage))
}
}
但是当我尝试使用它时
func performPlayerAction(_ action: PlayerAction) {
NSLog("page %@", String(describing: somePage))
somePage?.dispatchMessageToScript(withName: action.rawValue, userInfo: nil)
}
属性 somePage 的值为 nil。
为什么会这样?
非常感谢!
如果内容脚本正在向扩展处理程序发送消息,该消息将触发方法 messageReceived
,我们可以在其中处理数据。 对于每条消息,都会有一个扩展处理程序的新实例,因此我们无法在扩展处理程序之间共享信息,除非我们将您的变量设为静态。
解决方法是:
static var somePage: SFSafariPage?
SFSafariPage 属性 像这样获取它的值
class SafariExtensionHandler: SFSafariExtensionHandler {
var somePage: SFSafariPage?
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) {
// This method will be called when a content script provided by your extension calls safari.extension.dispatchMessage("message").
if messageName == "script injected successfully" {
somePage = page
NSLog(String(describing: somePage))
}
}
但是当我尝试使用它时
func performPlayerAction(_ action: PlayerAction) {
NSLog("page %@", String(describing: somePage))
somePage?.dispatchMessageToScript(withName: action.rawValue, userInfo: nil)
}
属性 somePage 的值为 nil。 为什么会这样? 非常感谢!
如果内容脚本正在向扩展处理程序发送消息,该消息将触发方法 messageReceived
,我们可以在其中处理数据。 对于每条消息,都会有一个扩展处理程序的新实例,因此我们无法在扩展处理程序之间共享信息,除非我们将您的变量设为静态。
解决方法是:
static var somePage: SFSafariPage?