HTMLViewer: Select All + Capy

I have a HTMLViewer with some contents in it.
If I right click on the HTMLViewer and Select All and copy its contents I can CTRL-V (paste) in any place.
Not a text, but a real web page (I am using Windows).

I’d like to know if I can do this by code and how.
Thanks for any help.

I did this as two extension methods just to make it a bit more apparent what’s happening. These could be combined in to a SelectAllAndCopy method, though.

In a module, add the following methods:

Public Sub SelectAll(extends h as DesktopHTMLViewer)
  var exec() as string
  exec.Add( "var selection = window.getSelection()," )
  exec.Add( "    range = document.createRange();" )
  exec.Add( "range.selectNodeContents(document.body);" )
  exec.Add( "selection.removeAllRanges();" )
  exec.Add( "selection.addRange(range);" )
  h.ExecuteJavaScript( String.FromArray( exec, "" ) )
End Sub

Public Sub Copy(extends h as DesktopHTMLViewer)
  h.ExecuteJavaScript( "document.execCommand('copy');" )
End Sub

Call as:


This does use the old document.execCommand to perform the copy operation, which is in the process of being deprecated but still works everywhere we care about (Xojo HTMLViewer renderers). There’s a newer JavaScript Clipboard API that may wish to implement in order to be future proof.

1 Like

Thank you Anthony.
It looks promising.
I’ll do it as you show and I will tell you the results.

It works great! Thanks!
Now I will try to develop it with the Clipboard API and I will tell you how it goes.

1 Like

Happy to help, and I look forward to hearing about your adventures in JavaScript!