I see.  It isn't the DOCTYPE it has complaining about. It is that you are
placing raw text.  You can't have new lines.

If you want to inject arbitrary strings you should use the execute(String
js, Object[] params) variant:
https://www.codenameone.com/javadoc/com/codename1/ui/BrowserComponent.html#execute-java.lang.String-java.lang.Object:A-

E.g.  myBrowserComponent.execute("...iframe.setAttribute('srcdoc',
${0});...", new Object[]{htmlText});

That will properly encode the htmlText (e.g. escaping new lines and other
problematic characters).

On Thu, Oct 22, 2020 at 5:36 AM 'P5music' via CodenameOne Discussions <
[email protected]> wrote:

> Hello,
> The injected HTML is not under my control, it is a string. If it doesn't
> like '<!DOCTYPE as a single string, it also could be not liking other
> things.
> In the provided code above it seems that it is written that way but it is
> a string
> created this way:
> " ... iframe.setAttribute(\"srcdoc\",\""+htmlText+"\");"
> Also, as you can see double-quotes " have been replaced by single quotes '
> by the executeAndWait method.
>
> Il giorno giovedì 22 ottobre 2020 alle 13:46:25 UTC+2 Steve Hannah ha
> scritto:
>
>> Perhaps it doesn't like the doctype tag.  Try splitting it up.  E.g.
>>
>> iframe.setAttribute('srcdoc', '<'+'!DOCTYPE html>...');
>>
>> On Thu, Oct 22, 2020 at 4:26 AM 'P5music' via CodenameOne Discussions <
>> [email protected]> wrote:
>>
>>> In my CodenameOne app some Javascript code is injected to create a DOM,
>>> made of IFRAMES with HTML code inside.
>>> The HTML code is correct but I am debugging in Chrome and I see that
>>> when the HTML code starts an error is detected (the error is also in the
>>> IntelliJ IDEA console):
>>>
>>> The following text is the function that is made from the executeAndWait
>>> method:
>>>
>>> (function(){var BASE_URL='
>>> https://www.codenameone.com/!cn1return/';function doCallback(val) {
>>>  var url = BASE_URL + encodeURIComponent(JSON.stringify(val));  if
>>> (window.cefQuery) { window.cefQuery({request:'shouldNavigate:'+url,
>>> onSuccess: function(response){}, onFailure:function(error_code,
>>> error_message) { console.log(error_message)}});}  else if
>>> (window.cn1application && window.cn1application.shouldNavigate) {
>>> window.cn1application.shouldNavigate(url) } else if (true)
>>> {window._cn1ready = window._cn1ready || [];
>>> window._cn1ready.push(function(){window.cn1application.shouldNavigate(url)});}
>>> else {window.location.href=url}} var result = {value:null, type:null,
>>> errorMessage:null, errorCode:0, callbackId:3};var callback = {  onSucess:
>>> function(val) { this.onSuccess(val);},   onSuccess: function(val) {
>>> result.value = val; result.type = typeof(val); if (val !== null && typeof
>>> val === 'object') {result.value = val.toString();} doCallback(result);},
>>>  onError: function(message, code) { if (message instanceof Error)
>>> {result.errorMessage = message.message; result.errorCode = 0;} else
>>> {result.errorMessage = message; result.errorCode = code;}
>>> doCallback(result);}};try { var
>>> div=document.createElement('DIV');div.addEventListener('mousedown',
>>> function (event)
>>> {callMouseDown(div.getAttribute("id"));});div.addEventListener('mouseup',
>>> function (event) {callMouseUp(div.getAttribute("id"));});var
>>> iframe=document.createElement("IFRAME");iframe.style.zIndex="0";iframe.style.pointerEvents="none";div.style.position="relative";
>>> div.id="0";iframe.setAttribute("scrolling","no");iframe.setAttribute("frameborder","no");iframe.setAttribute("noresize","noresize");iframe.setAttribute("height","100");
>>> iframe.innerText="FALLBACK";iframe.setAttribute("srcdoc","<!DOCTYPE html>
>>>
>>> I did not paste all the function body. I stopped when the first HTML
>>> code begins for the first IFRAME and the error is there.
>>> As you can see in the attached image the red error starts at the comma
>>> (Uncaught SyntaxError: Invalid or unexpected token).
>>>
>>> (The HTML code is a text with other quotes inside as it is in normal
>>> HTML but it is correctly escaped)
>>>
>>> Can you help me? Do you see something? Could this be caused by the
>>> calling function?
>>> Thanks in advance
>>> Regards
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "CodenameOne Discussions" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/codenameone-discussions/42678b68-78f9-40fa-adb1-7f4740b9796fn%40googlegroups.com
>>> <https://groups.google.com/d/msgid/codenameone-discussions/42678b68-78f9-40fa-adb1-7f4740b9796fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> --
>> Steve Hannah
>> Software Developer
>> Codename One
>> http://www.codenameone.com
>>
> --
> You received this message because you are subscribed to the Google Groups
> "CodenameOne Discussions" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/codenameone-discussions/7bf62f74-3642-46d9-b446-9c2bc6aabe6en%40googlegroups.com
> <https://groups.google.com/d/msgid/codenameone-discussions/7bf62f74-3642-46d9-b446-9c2bc6aabe6en%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
Steve Hannah
Software Developer
Codename One
http://www.codenameone.com

-- 
You received this message because you are subscribed to the Google Groups 
"CodenameOne Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/codenameone-discussions/CAGOYrKWSvZpXjpbNeehwcYcRVn199cfr4VK%3D2zYXGa15Eti6dw%40mail.gmail.com.

Reply via email to