使用JavaScript访问WKWebView中的本地文件



我有一个iOS应用程序,其中部分逻辑是用JavaScript编写的。我已经创建了一个WKWebView,在那里我加载了我的初始.js文件,但在执行时,它需要从我的本地资源中读取其他文件。问题是我缺少了一个如何实现这一目标的概念

我尝试过将Swift中的每个单独的文件一个接一个地加载到webView中,但手动加载的文件太多了
不过,也许Swift有一个http服务器可以访问项目文件。我找到了这样或这样的解决方案
一种方法看起来很棒,但即使我这样做了,我仍然无法从我的Xcode项目结构中访问文件和文件夹。我已经创建了一个基本的http服务器和一个DAV服务器,添加了GET处理程序等。

也许我在设置它时做了一些错误,但最终当我创建一个httpserver的对象时,我仍然可以从http://192.168.0.11:8080webView访问它,这样可以确保它正确初始化并工作。

回答我的问题,这样对将来的人有帮助。我最后用过这个图书馆。而且看起来缺少一些配置,所以服务器动态地为所有页面和文件提供服务。我的代码是:

guard let websitePath = Bundle.main.path(forResource: "myFolderNameInProjectStructure", ofType: nil) else { return }
let httpServer = GCDWebServer()
httpServer.addGETHandler(forBasePath: "/", directoryPath: websitePath, indexFilename: nil, cacheAge: 3600, allowRangeRequests: true)
httpServer.addHandler(forMethod: "GET", pathRegex: "/.*\.html", request: GCDWebServerRequest.self) { (request) in
return GCDWebServerDataResponse(htmlTemplate: websitePath + request.path, variables: ["variable": "value"])
}
httpServer.start(withPort: 8080, bonjourName: "MC Local Server")

当完成此配置并且服务器在您选择的端口上运行时(我的端口是8080(,您只需打开应用程序中的嵌入式浏览器(例如WKWebView(并加载

let url = URL(string: "http://localhost:8080/index.html")!
webView.load(URLRequest(url: url))

如果您只是想在连接到http服务器的/时始终运行index.html,则可以在httpServer.start()方法之前添加此配置:

httpServer.addHandler(forMethod: "GET", path: "/", request: GCDWebServerRequest.self) { (request) in
return GCDWebServerResponse(redirect: URL(string: "index.html")!, permanent: true)
}

现在,在webView中,只需连接到http://localhost:8080,就会加载您作为GCDWebServerResponse提供的文件。

相关内容

  • 没有找到相关文章

最新更新