0

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。为什么会这样?非常感谢!

4

1 回答 1

0

如果内容脚本正在向扩展处理程序发送消息,则该消息将触发messageReceived我们可以处理数据的方法。对于每条消息,都会有一个扩展处理程序的新实例,因此我们不能在扩展处理程序之间共享信息,除非我们将您的变量设为静态。

解决方案是:

    static var somePage: SFSafariPage?
于 2022-01-30T13:58:27.993 回答