1212 *******************************************************************************/
1313package org .eclipse .lsp4e .operations .hover ;
1414
15+ import java .lang .reflect .Field ;
1516import java .net .URL ;
17+ import java .util .Objects ;
1618import java .util .UUID ;
1719
20+ import org .apache .commons .lang .StringEscapeUtils ;
1821import org .eclipse .core .runtime .FileLocator ;
1922import org .eclipse .core .runtime .Platform ;
2023import org .eclipse .jdt .annotation .Nullable ;
@@ -93,6 +96,13 @@ protected void createContent(Composite parent) {
9396 b .setJavascriptEnabled (true );
9497 }
9598
99+
100+ public void setTextInBrowser (final Browser browser , final String text ) {
101+ String escapedHtmlBody = StringEscapeUtils .escapeJavaScript (text );
102+ safeExecute (browser , "document.body.innerHTML = \" " + escapedHtmlBody + "\" ;" ); //$NON-NLS-1$//$NON-NLS-2$
103+ updateBrowserSize (browser );
104+ }
105+
96106 private void updateBrowserSize (final Browser browser ) {
97107 if (getShell ().isDisposed () || browser .isDisposed () || getInput () == null )
98108 return ;
@@ -102,7 +112,7 @@ private void updateBrowserSize(final Browser browser) {
102112 Point hint = computeSizeHint ();
103113 setSize (hint .x , hint .y );
104114
105- if (!"complete" .equals (safeEvaluate (browser , "return document.readyState" ))) { //$NON-NLS-1$ //$NON-NLS-2$
115+ if (!"complete" .equals (safeEvaluate (browser , "if (document.documentElement === null) { return 'no content';} return document.readyState; " ))) { //$NON-NLS-1$ //$NON-NLS-2$
106116 UI .getDisplay ().timerExec (200 , () -> updateBrowserSize (browser ));
107117 return ;
108118 }
@@ -183,7 +193,15 @@ public void setInput(@Nullable Object input) {
183193 return ;
184194 }
185195 if (html != null && !html .isBlank ()) {
186- super .setInput (styleHtml (html ));
196+ try {
197+ Field f = BrowserInformationControl .class .getDeclaredField ("fBrowser" ); //$NON-NLS-1$
198+ f .setAccessible (true );
199+ Browser browser = (Browser ) f .get (this );
200+ Objects .requireNonNull (browser );
201+ setTextInBrowser (browser , html );
202+ } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e ) {
203+ super .setInput (html );
204+ }
187205 } else {
188206 // No content from LS; hide placeholder
189207 super .setInput ("" ); //$NON-NLS-1$
0 commit comments