gpt4 book ai didi

javascript - 运行JS代码以快速获取数据

转载 作者:行者123 更新时间:2023-11-30 12:41:16 26 4
gpt4 key购买 nike

我需要在 CloudKit 中获取 CkAsset 的 Web url。然而,在 swift 中,Apple 不允许我们直接获取 WebURL,它只下载 Assets 并给我们 fileURL。然而,使用 javascript 这是可能的。因此,我编写了一个 JS 文件来获取 CkAsset WebURL。当我在浏览器中运行这个 javascript 文件时。我试图用下面的代码快速运行它,但我不能。当我搜索时,有一个名为“stringByEvaluatingJavaScriptFromString”的函数,但我不知道如何运行它。

index.html

        <meta charset="utf-8">
<title>TIL - Today I Learned</title>
<script src="https://cdn.apple-cloudkit.com/ck/1/cloudkit.js" async></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<script type="text/javascript" src="TIL.js"></script>

JavaScript 文件:

window.addEventListener('cloudkitloaded', function() {
console.log("listening for cloudkitloaded");
CloudKit.configure({
containers: [{
// To use your own container, replace containerIdentifier and apiToken
containerIdentifier: 'iCloud.com.emreonder.ogun-dalka-music',
apiToken: '42ba168168dbf3a8c9562904ebf311864258f8dd3638a241d2372057ea0e8a55',
environment: 'development'
}]
});
console.log("cloudkitloaded");

var self = this;
console.log("get default container");
var container = CloudKit.getDefaultContainer();

console.log("set publicDB");
var publicDB = container.publicCloudDatabase;
self.items = ko.observableArray();

// Fetch public records
// self.fetchRecords = function() {
console.log("fetching records from " + publicDB);
var query = { recordType: 'Musics'};

// Execute the query.
return publicDB.performQuery(query).then(function(response) {
if(response.hasErrors) {
console.error(response.errors[0]);
return;
}
var records = response.records;
var numberOfRecords = records.length;
if (numberOfRecords === 0) {
console.error('No matching items');
return;
}

console.log(records.length + " records")
console.log(records);
self.items(records);
});
// };
});

Swift 文件:

 let url = Bundle.main.url(forResource: "index", withExtension: "html")
let myRequest = NSURLRequest(url: url!);
webView.loadRequest(myRequest as URLRequest);
print(webView.pageCount)
let test_string = webView.stringByEvaluatingJavaScript(from: "function();")
print(test_string)

编辑:我也放置了 html 文件,但现在我不知道如何调用 javascript 函数。

最佳答案

经过一番努力,好吧。我想解决我的问题。通过此解决方案,您可以在 CloudKit 上获取流 url(例如 Assets )。

首先我创建了一个webView(实际上,它只是在代码中,GUI中没有任何内容)。

  let url = Bundle.main.url(forResource: "index", withExtension: "html")
let myRequest = NSURLRequest(url: url!);
webView.loadRequest(myRequest as URLRequest);
webView.delegate = self

然后我通过 stringByEvaluatingJavaScript 函数获取 js 文件中的变量(我需要在 js 文件中的函数下面创建一个变量

 let a = webView.stringByEvaluatingJavaScript(from: "myVar")
print(a!)
let url : NSString = a! as NSString
let urlStr : NSString = url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)! as NSString
let searchURL : NSURL = NSURL(string: urlStr as String)!
print(searchURL)
/*https://cvws.icloud-content.com/B/AVHgxc_-X3u9H5xK684KmUQrzDqp/$%7Bf%7D?o=Apgif1Giyg-lwRiNre2KJYl-5EhUAiL1m1OgE3-osxpxexWD7YGjCAOFCoQLRv8sGUglywu2tGr-OgfGtDZ15k0&v=1&x=3&a=BbLB0UptOX3bA-k6OQ&e=1487341935&k=_&fl=&r=0f83571c-d168-4743-b38b-0e808baa0a1a-1&ckc=iCloud.com.emreonder.ogun-dalka-music&ckz=_defaultZone&p=61&s=OuE127GKlo_0EIZ6y5t49gMv0qM
*/
let playerItem = AVPlayerItem(url: searchURL as URL)
player = AVPlayer(playerItem: playerItem)
let playerLayer:AVPlayerLayer = AVPlayerLayer(player: player)
self.view.layer.addSublayer(playerLayer)
self.player.play()

关于javascript - 运行JS代码以快速获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com