Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WkWebView Evaluatejavascript返回不支持的类型错误_Javascript_Ios_Swift_Wkwebview_Stringbyevaluatingjavascr - Fatal编程技术网

WkWebView Evaluatejavascript返回不支持的类型错误

WkWebView Evaluatejavascript返回不支持的类型错误,javascript,ios,swift,wkwebview,stringbyevaluatingjavascr,Javascript,Ios,Swift,Wkwebview,Stringbyevaluatingjavascr,我向javascript函数发送一个值并得到一个结果。但是,当在代码下运行时,我得到“Error Domain=wkerrodomain Code=5”JavaScript执行返回了不支持类型的结果“UserInfo={NSLocalizedDescription=JavaScript执行返回了不支持类型的结果}”错误 webView?.evaluateJavaScript("getURL()") { (result, error) in if let error = e

我向javascript函数发送一个值并得到一个结果。但是,当在代码下运行时,我得到“Error Domain=wkerrodomain Code=5”JavaScript执行返回了不支持类型的结果“UserInfo={NSLocalizedDescription=JavaScript执行返回了不支持类型的结果}”错误

webView?.evaluateJavaScript("getURL()") { (result, error) in
            if let error = error
            {
                print("\(error)");
                return
            }
            if let song = result as? String
            {
                print("\(song)");
            }
        }
和javascript代码如下

    function getURL(){
  CloudKit.configure({
                         containers: [{
                                      // To use your own container, replace containerIdentifier and apiToken
                                      containerIdentifier: 'iCloud.com.hello.myapp',
                                      apiToken: 'myApiKey',
                                      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[0].fields.Song_File.value.downloadURL);
                                                                  self.items(records);


                                                                  myVar = records[emre].fields.Song_File.value.downloadURL;
                                                                  document.getElementById('someId').innerHTML = myVar;


                                                                  });
                                                                  return "emre";

  };

尝试将javascript代码包装到
setTimeout

webView?.evaluateJavaScript("setTimeout(function() {getURL()}, 1000);")

我遇到了同样的事情,搜索把我带到了这里。后来,我找到了答案:


这可能是由于从javascript返回
nil
,然后报告为错误。只允许返回字符串。因此,只要将那些
return
语句更改为
return'
或return'error msg'`就可以解决这个问题。

您是否检查了在脚本得到评估时DOM是否准备好了?