I am rendering local web content on a WKWebView
using a local server of GCDWebServer
, but I have a cross-origin request due to cookies sitting in the backend. how could I configure a proxy that will solve this problem.
NOTE: I have try'd to implement something on GitHub called CorsProxy
but it's outdated and frankly doesn't solve my problem, creating a proxy.
I have come across answers addressing a similar problem, however I am running my webView on a GCDWebServer and I don't know how to create such a proxy on this particular local server?
Any help?
Here's my code:
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {
var wkWebView: WKWebView!
var webServer = GCDWebServer()
var contentController = WKUserContentController()
func initWebServer() {
let folderPath = Bundle.main.path(forResource: "www", ofType: nil)
webServer.addGETHandler(forBasePath: "/", directoryPath: folderPath!, indexFilename: "index.html", cacheAge: 0, allowRangeRequests: true)
webServer.start(withPort: 8080, bonjourName: "GCD Web Server")
}
public override func viewDidLoad() {
super.viewDidLoad()
initWebServer()
let userScript = WKUserScript(source: "helloMsg2(\"boooo hoo hoo hoooo\")", injectionTime: .atDocumentEnd, forMainFrameOnly: true)
contentController.addUserScript(userScript)
contentController.add(self, name: "callback")
let config = WKWebViewConfiguration()
config.userContentController = contentController
wkWebView = WKWebView(frame: view.bounds, configuration: config)
wkWebView.scrollView.bounces = false
wkWebView.uiDelegate = self
wkWebView.navigationDelegate = self
view.addSubview(wkWebView!)
wkWebView.load(URLRequest(url: webServer.serverURL!))
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "callback" {
print("message from javaScript is: \(message.body)")
} else {
print("message from javaScript is: \(message.body)")
}
}
}