[webkit-gtk] Modifying HTML before loading it in a WebView

Michael Gratton mike at vee.net
Thu Oct 6 20:45:05 PDT 2016


Hey Adrián,

Thanks for the suggestions and feedback — I've actually started work 
on this and so am now running into these issues.

On Wed, Aug 3, 2016 at 11:45 PM, Adrián Pérez de Castro 
<aperez at igalia.com> wrote:
>>  One of the things that needs to be taken care of is how Geary does
>>  manipulates an HTML email's markup before loading it into a WebView.
>>  This is done for a few reasons: Applying app-specific and 
>> user-specific
>>  CSS, to implement collapsible quote sections, for handling loading 
>> of
>>  inline and attached images, and to ensure that bulk and junk 
>> messages
>>  containing bugged remote images, etc. aren't automatically 
>> triggered.
> 
> You may want to consider using WebKitUserContentManager [1]. In 
> short, it
> allows you to inject CSS and JavaScript snippets into content loaded 
> in a
> WebKitWebView. The injected JavaScript code runs in the WebProcess, 
> in the
> same context as the loaded web content, and it can manipulate it in 
> any
> way it wants, using the DOM and all the rest of web APIs.
> 
> Additionally, you can register a “message handler”, which allows 
> you to
> send messages from JavaScript with:
> 
>   window.webkit.messageHandlers.<handler-name>.postMessage(value)
> 
> When that function is called from JavaScript, “value” is 
> serialized and
> sent to the UIProcess (your application), and the 
> WebKitUserContentManager
> emits the “script-message-received::<handler-name>” signal.
> 
> If you need to send messages from the UIProcess to the WebProcess, 
> you can
> use webkit_web_view_run_javascript() e.g. to call JavaScript 
> functions which
> have been defined in your injected scripts.

This mechanism sounds good, and I might be able to get away with using 
this rather than implementing a WebExtension, except for one thing: It 
quite reasonably seems to require JavaScript is enabled for 
webkit_web_view_run_javascript() to work, and currently Geary disables 
JavaScript since it's not widely required for HTML email, and since it 
reduces the size of the malware attack surface.

I'm reluctant to re-enable JS because of the secuity angle, but was 
wondering if, aside from playing wack-a-mole by removing SCRIPT 
elements on HTML mail, if there is some mechanism to allow 
WebKitUserContentManager scripts and webkit_web_view_run_javascript() 
to function, while preventing JS in the HTML from executing?

Ta!

//Mike

-- 
⊨ Michael Gratton, Percept Wrangler.
⚙ <http://mjog.vee.net/>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.webkit.org/pipermail/webkit-gtk/attachments/20161007/fab01f27/attachment.html>


More information about the webkit-gtk mailing list