             return client.call(withArguments: [platform])
         }(), forProperty: Constant.Script.store)
         print("Client:", "launched")
-        delegate.wukongDidLaunch()
+        delegate?.wukongDidLaunch()
     }
 
     private func jsPromise(_ executor: ((@escaping (JSValue?) -> Void, @escaping (JSValue?) -> Void) -> Void)? = nil) -> JSValue {

                    } as @convention(block) () -> String, to: AnyObject.self),
                    "webview": unsafeBitCast({ [unowned self] (url) in
                        print("Client:", "open", url)
                        self.delegate.wukongRequestOpenURL(url)
                    } as @convention(block) (String) -> Void, to: AnyObject.self),
                    "reload": unsafeBitCast({ [unowned self] () in
                        DispatchQueue.main.async {

            context?.exception = exception
            if let exception = exception?.toString() {
                print("Client:", "exception", exception)
                self.delegate?.wukongDidThrowException(exception)
            }
        }
        context.evaluateScript(script)
