Image width renditions breaks when using Vue.js

Avatar

Avatar

herbergt

Avatar

herbergt

herbergt

30-10-2020

The image width renditions functionality of the image core component breaks when using with Vue.js

The error says as follows

 

Uncaught TypeError: Cannot read property 'removeAttribute' of null
    at unwrapNoScript (clientlib-base.js:1877)
    at init (clientlib-base.js:1797)
    at new Image (clientlib-base.js:2000)
    at HTMLDocument.onDocumentReady (clientlib-base.js:2007)

 

The error happens right here.

 

The div with the id app is being used as the Vue main template. This Vue template encompass the whole page body of the page core component.

 

<div data-sly-attribute.id="app" data-sly-use.templatedContainer="com.day.cq.wcm.foundation.TemplatedContainer"
         data-sly-repeat.child="${templatedContainer.structureResources}"
         data-sly-resource="${child.path @ resourceType=child.resourceType, decorationTagName='div'}"></div>

 

 

Tracing down the problem I found that the Vue.js is changing the HTML of the nonscript tag generated by the image core component, stripping off the white spaces that the component generates. When the clientlib of the image core component tries to get the generated tag image, it uses the textContent of the element as follows that._elements.noscript.textContent.trim() , but it retrieves and empty text instead of the text with the image tag, because Vue had previously removed the white spaces. This causes the clientlib to break here.

 

Here the link to reproduce the issue. Please check the console to spot the issue.

https://jsfiddle.net/herbergt/xgtzya5k/16/

 

Any workaround to solve this?

 

 

 

core components image renditons

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

Anudeep_Garnepudi

Avatar

Anudeep_Garnepudi

Anudeep_Garnepudi

02-11-2020

Hi @herbergt 

Generally content inside noscript tag will be rendered as string/text. In you case somehow it is converting to HTML is seems after instantiating the Vue. One thing you can do is in place of textContent use innerHTML as mentioned below. Which will be consistent.

that._elements.noscript.innerHTML.trim()

Hope this helps!

AG

Answers (0)