用iOS的WKWebView加载cocos creator构建的Web Mobile项目,一直处于loading界面

cocos creator:1.8.2-rc2
Xcode:9.2

用cocos creator创建一个hello world,构建项目选择Web Mobile,将整个Web Mobile文件夹拖到iOS工程中,然后用iOS的WKWebView加载index.html,真机运行,一直处于loading界面。

用iOS的UIWebView就可以正常加载。

请问有人遇到过,或者知道是什么情况吗?

@jare @wangzhe @panda

补充信息

经过逐步追踪,发现调用轨迹如下(cocos2d-js-min.js中的代码我用调试模式构建出来的cocos2d-js.js中的代码覆盖了):

  1. main.js中cc.director.loadScene
  • cocos2d-js-min.js中_loadSceneByUuid的cc.AssetLibrary.loadAsset
  • cocos2d-js-min.js中AssetLibrary中loadAsset的Loader.load,回调直接返回“[AssetLibrary] loading JSON or dependencies failed:”
  • cocos2d-js-min.js中 25595行:proto.load中 var queue = LoadingItems.create,
    它的回调中发现它要加载一个不存在的json文件,导致场景加载失败

UIWebView

UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];

NSString *path = [[NSBundle mainBundle]pathForResource:@"web-mobile/index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];

WKWebView

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
webView.navigationDelegate = self;
[self.view addSubview:webView];

NSString *accessPath = [[NSBundle mainBundle]pathForResource:@"web-mobile" ofType:nil];
NSString *path = [[NSBundle mainBundle] pathForResource:@"web-mobile/index" ofType:@"html"];
    
NSURL *accessUrl = [NSURL fileURLWithPath:accessPath];
NSURL *url = [NSURL fileURLWithPath:path];
[webView loadFileURL:url allowingReadAccessToURL:accessUrl];

demo:
testWKWebView.zip (2.3 MB)

顶一下,希望有人可以提供一点思路

用mac连手机调试 看控制台有没报错信息啊

就是在iphone上运行的,控制台什么信息都没有

顶一下:14:

直接拖到工程中能打开?

在ios工程中用webview加载cocos creator的Web Mobile项目的index.html,相当于加载本地html

UIWebView

UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:webView];
NSString *path = [[NSBundle mainBundle]pathForResource:@"web-mobile/index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];

WKWebView

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
webView.navigationDelegate = self;
[self.view addSubview:webView];

NSString *accessPath = [[NSBundle mainBundle]pathForResource:@"web-mobile" ofType:nil];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"web-mobile/index" ofType:@"html"];
    
NSURL *accessUrl = [NSURL fileURLWithPath:accessPath];
NSURL *url = [NSURL fileURLWithPath:path];
[webView loadFileURL:url allowingReadAccessToURL:accessUrl];

正文上传了demo,希望有人可以帮忙解答

这样不会跨域吗

跨域?整个web-mobile项目都拖进iOS工程了,就相当于加载本地html文件,为什么会存在跨域的问题

@jare @wangzhe @panda
跪求技术开发团队出来个人 帮忙看一下这个问题啊:6:

会存在跨域的 HTML能正常打开 但是 依赖的脚本资源文件会存在跨域问题 你试试部署在电脑上 webview访问内网地址

把web-mobile部署在我电脑上,开个apache,在iphone上运行项目,用WKWebView可以加载到hello world,图片显示正常

那就是跨域问题啦 这种嵌套在webviewd运行的话 还是要远程加载的

可是用UIWebView可以正常加载本地的web-mobile啊,另外,在上面的demo中,我使用WKWebView加载一个普通的html,就可以正常加载出来啊,你可以下一下demo看看

再顶!d=====( ̄▽ ̄*)b

同求 :kissing_heart:

这个问题还是去google找答案吧

要有web服务才行,就像你直接双击index.html打开也是不行的,把代码部署到web服务上,用url访问就可以了

@luyudanb

解决了,真的是跨域问题,加载本地Web Mobile项目之前加上第一句话,就可以了
@18581391615 @zengbinsi 谢谢两位的回复

//允许WKWebView加载file协议的url
[self.wkWebView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.wkWebView loadRequest:requestObj];