【发布时间】:2017-02-13 10:26:35
【问题描述】:
我需要在 CloudKit 中获取 CkAsset 的网址。然而,在 swift 中,Apple 不允许我们获取直接的 WebURL,它只下载资产并给我们文件 URL。但是,使用 javascript 是可能的。因此,我编写了一个获取 CkAsset WebURL 的 JS 文件。当我在浏览器中运行这个 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 函数。
【问题讨论】:
-
评估 js 方法是 WK/UIWebview 的公共方法,您需要先将其加载到运行您的 js 的 webview 中
-
它说“没有初始化程序”。我需要实现委托还是什么?
标签: javascript ios swift javascriptcore