Figured out the problem: iframe.contentDocument.designMode= "On"; Should be off.
But still cant figure out sizing of the ifrrame. The container is 100x100 pct. Will continue to poke around. ed On Wed, Apr 12, 2017 at 5:31 PM, Ed <[email protected]> wrote: > Hi Jens, > > I made these changes: > <code> > import com.google.gwt.dom.client.IFrameElement; > private static final IFrameElement iframe = Document.get(). > createIFrameElement(); > > > FlowPanel innerBox = new FlowPanel(); > innerBox.getElement().appendChild(iframe); > > public static void setIFrame(IFrameElement ife, String url) { > try { > RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, > url); > Request request = builder.sendRequest(null, new > RequestCallback() { > @Override > public void onError(Request request, Throwable exception) { > Window.alert("Error setIFrame Load"); > } > > @Override > public void onResponseReceived(Request requestli, Response > responseli) { > if (200 == responseli.getStatusCode()) { > fillIframe(ife,responseli.getText()); > addHeadElement(ife, "mycss.css"); > } else { > Window.alert("Oops Server Returned: " + > responseli.getStatusCode()); > } > } > final native void addHeadElement(IFrameElement iframe, > String cssUrl) /*-{ > setTimeout(function() { > > var body; > if ( iframe.contentDocument ) { > // FF > iframe.contentDocument.designMode= "On"; > iframe.contentDocument.execCommand('styleWithCSS', > false,'false'); > body= iframe.contentDocument.body; > } > else if ( iframe.contentWindow ) { > // IE > body = iframe.contentWindow.document.body; > } > > if (body == null) { > return; > } > > body.className = "custom-body-classname"; > var head = body.previousSibling; > if(head == null) { > head = iframe.contentWindow.document. > createElement("head"); > > iframe.contentWindow.document. > childNodes[0].insertBefore(head, body); > } > var fileref = iframe.contentWindow.document. > createElement("link"); > fileref.setAttribute("rel", "stylesheet"); > fileref.setAttribute("type", "text/css"); > fileref.setAttribute("href", cssUrl); > head.appendChild(fileref); > }, 50); > }-*/; > > final native void fillIframe(IFrameElement iframe, String > content) /*-{ > var doc = iframe.document; > > if(iframe.contentDocument) > doc = iframe.contentDocument; // For NS6 > else if(iframe.contentWindow) > doc = iframe.contentWindow.document; // For IE5.5 and > IE6 > > // Put the content in the iframe > doc.open(); > doc.writeln(content); > doc.close(); > }-*/; > > > > }); > } catch (Throwable e) { > Window.alert("Error During Log Out"); > > } > } > </code> > > Clicking from outside renders the area, but the click from inside the > iframe are broken, it offers a select to move rather then the click fo fill > the area. > > Also the iframe is not sized it is very small. > > Any suggestions? > > > > On Wed, Apr 12, 2017 at 11:52 AM, Ed <[email protected]> wrote: > >> @Jens Thank You I will look into the options >> >> On Wed, Apr 12, 2017 at 11:36 AM, Jens <[email protected]> wrote: >> >>> Well there are two solutions: >>> >>> 1.) use an iFrame => opening links inside the iframe should just work. >>> However the URL won't be displayed in the browsers url bar, maybe you don't >>> want that. And because you mentioned it: The iframe must not have a fixed >>> size, you can stretch it via CSS, an example using CSS Flexbox: >>> https://jsfiddle.net/zzvtafv6/ >>> >>> 2.) Make a custom widget/composite that takes the HTML and displays it >>> as you do now. However that widget/composite should then intercept all >>> clicks on anchors, prevent the browser default action, extract the href url >>> and download the contents using a XMLHttpRequest. Once you have the result >>> you can again set the html into your custom widget/composite. Basically >>> don't let the browser fetch the url but do it yourself. However you must >>> implement additional logic for clicks on anchors with modifiers and other >>> special cases (CTRL + left click, right click -> open as, right click -> >>> open) that trigger specific browser actions like opening the link in a new >>> tab. It might be a bit tricky to get right so the user does not notice that >>> you have actually intercepted their clicks. >>> >>> Using an iframe is probably the easiest solution, and they are still >>> allowed in HTML5. >>> >>> >>> Maybe there is a possible 3rd solution using web components / html >>> import, see: http://webagility.com/posts/web-components-vs-iframes but >>> I think you still need to intercept clicks that way, as in the 2nd solution. >>> >>> >>> -- J. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "GWT Users" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected] >>> . >>> Visit this group at https://groups.google.com/group/google-web-toolkit. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> > -- You received this message because you are subscribed to the Google Groups "GWT Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/d/optout.
