Re: How to get DOMDocument from WkWebView


Gerriet M. Denkmann
 

On 9 Jul 2018, at 23:41, Jens Alfke <jens@...> wrote:

On Jul 7, 2018, at 8:56 AM, Gerriet M. Denkmann <g@...> wrote:

But: how can I get the DOMDocument of a WkWebView?
I navigate (using WebView) the DOM hierarchy to get the interesting stuff.
I do the same thing (in an app I've been tinkering with for years), but it's a dead end. WkWebView runs the WebView in a separate process, for security reasons, which means its DOM objects are completely inaccessible.

The best workaround seems to be to write the DOM stuff in JavaScript, and use the hooks Keary mentioned to communicate messages back and forth to the native app. In other words, it's a lot like a modern web app, except using those hooks instead of XHR.

—Jens
If the web-page I am interested in is *not* under my control, could I still "write the DOM stuff in JavaScript” ?

If so: how would I start doing this?

Currently I am doing stuff like:

get webString from web via URLSession
webView.loadHTMLString(webString, baseURL: nil)

in webView(_ sender: WebView!, didFinishLoadFor frame: WebFrame!) then do:
curr = domDocument
curr = child of curr which is DOMHTMLHtmlElement
curr = child of curr which is DOMHTMLBodyElement
curr = child of curr which is DOMHTMLDivElement and has idName = “something”
curr = child of curr which is DOMHTMLElement and has tagName = “MAIN”
etc.
htmlString = curr.innerHTML
add some prefix and postfix to htmlString
wkWebView.loadHTMLString(htmlString, baseURL: nil)

Gerriet.

Join {cocoa@apple-dev.groups.io to automatically receive all group messages.