Hi,
Recently we start to investigate the possibility to adopt WKWebView for 
building ios cordova hybrid apps. Currently those apps are built with UIWebView 
on ios cordova library.

In our application, the main html content is loaded from remote web server at 
runtime, and local cordova js resource are then injected into html page to 
leverage the device native functions, such as camera, calendar, etc. As the 
html page is loaded from remote server using https connection, the wkwebview 
will not allow the local web resource (for example, cordova.js) to be injected 
into the html page by local file url (file:// url). We also tried to use the 
cordova localhost webserver plugin to inject the local web resource into the 
html page, but that does not work either as localhost web server plugin only 
supports http connection, and wkwebview does not allow to inject http content 
into the https html page. In addition, as https://localhost: is a different 
domain from the remote web page, so xhr request from https://localhost: will 
not be able to receive wkwebview’s didReceiveAuthenticationChallenge callback 
method to handle the challenge. Those limitations also apply even if injecting 
cordova web resource to a new iframe on the https html page.

So, in order to solve the issue, I wonder whether it is possible to have an 
option in cordova to allow loading the js resource as javascript context so 
instead of loading the js file as url as shown below
<script type=”text/javascript” src=”pluginscript.js”></script>
the javascript content will be loaded directly into the script element
<script type=”text/javascript” script>
…raw plugin script content
</script>

In this way, all the cordova script and remote https content can live in a 
single domain to avoid the cross domain limiation.

The initial loading of codova.js and other preload plugin js files can be 
injected using wkwebview userContentController at 
WKUserScriptInjectionTimeAtDocumentEnd. For the on-demand loading of plugin js 
files, the cordova.js can let the require method to send a cordova bridge call 
and then use wkwebview’s evaluateJavaScript method to load those javascitp 
content in <script> element.

Do you think the approach works? Or is there other better option?

Thanks
Jonathan


Reply via email to