|
@@ -1,6 +1,21 @@
|
|
|
import JavaScriptCore
|
|
|
import Alamofire
|
|
|
|
|
|
+func downloadJSFile(url: URL, completion: @escaping (Result<String, Error>) -> Void) {
|
|
|
+ AF.download(url).responseData { (response) in
|
|
|
+ switch response.result {
|
|
|
+ case .success(let data):
|
|
|
+ if let jsString = String(data: data, encoding: .utf8) {
|
|
|
+ completion(.success(jsString))
|
|
|
+ } else {
|
|
|
+ completion(.failure(NSError(domain: "Download Error", code: -1, userInfo: nil)))
|
|
|
+ }
|
|
|
+ case .failure(let error):
|
|
|
+ completion(.failure(error))
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func createJSContext() -> JSContext {
|
|
|
let ctx = JSContext()
|
|
|
|
|
@@ -33,6 +48,7 @@ func createJSContext() -> JSContext {
|
|
|
callback?.call(withArguments: [String(data: data, encoding: .utf8), nil])
|
|
|
}
|
|
|
if let error = response.error {
|
|
|
+ debugPrint(response)
|
|
|
callback?.call(withArguments: [nil, error.localizedDescription])
|
|
|
}
|
|
|
}
|
|
@@ -49,22 +65,39 @@ func createJSContext() -> JSContext {
|
|
|
return ctx!
|
|
|
}
|
|
|
|
|
|
-let ctx = createJSContext()
|
|
|
-
|
|
|
-
|
|
|
-let script = """
|
|
|
- AF.request("http://api.mywidgetsnow.com/health", "GET", null, null, function(data, err) {
|
|
|
- console.log(data);
|
|
|
- console.log(err);
|
|
|
- });
|
|
|
+func testSearch(keyword: String, ctx: JSContext) -> Void {
|
|
|
+ if let jsFunction = ctx.objectForKeyedSubscript("search") {
|
|
|
+ let promise = jsFunction.call(withArguments: ["周杰伦", nil])
|
|
|
+ // 检查返回值是否为 Promise
|
|
|
+ // 获取 Promise 的 then 函数
|
|
|
+ if let thenFunction = promise?.objectForKeyedSubscript("then") {
|
|
|
+ // 调用 then 函数,并传入回调函数
|
|
|
+ thenFunction.call(withArguments: [ { (resolvedValue: JSValue?) in
|
|
|
+ if let value = resolvedValue {
|
|
|
+ print("搜索成功", value)
|
|
|
+ }
|
|
|
+ }, { (rejectedReason: JSValue?) in
|
|
|
+ if let reason = rejectedReason {
|
|
|
+ print("搜索失败", reason)
|
|
|
+ }
|
|
|
+ }])
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
- AF.request("httpdddd://api.mywidgetsnow.com/health", "GET", null, null, function(data, err) {
|
|
|
- console.log(data);
|
|
|
- console.log(err);
|
|
|
- });
|
|
|
-"""
|
|
|
+let ctx = createJSContext()
|
|
|
|
|
|
-// 执行 JavaScript 脚本
|
|
|
-ctx.evaluateScript(script)
|
|
|
+if let url = URL(string: "http://hubgit.cn/ben/be-ytb/raw/master/js/info.js") {
|
|
|
+ downloadJSFile(url: url) { result in
|
|
|
+ switch result {
|
|
|
+ case .success(let jsString):
|
|
|
+ print("下载远程JS成功")
|
|
|
+ ctx.evaluateScript(jsString)
|
|
|
+ testSearch(keyword: "周杰伦", ctx: ctx)
|
|
|
+ case .failure(let error):
|
|
|
+ print("Download Error: \(error)")
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
RunLoop.main.run()
|