Ben 1 жил өмнө
parent
commit
0784cea514
2 өөрчлөгдсөн 49 нэмэгдсэн , 16 устгасан
  1. 1 1
      js/info.js
  2. 48 15
      js/main.swift

+ 1 - 1
js/info.js

@@ -63,7 +63,7 @@ request = async (method, url, data = null, headers = {}, local) => {
         }).then(res => res.text())
     }
     return new Promise((resolve, reject) => {
-        AF.request(method, url, data, headers, (data, err) => {
+        AF.request(url, method, data, headers, (data, err) => {
             if (err) {
                 reject(err);
             }

+ 48 - 15
js/main.swift

@@ -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()