mirror of
https://github.com/tenrok/vue-json-viewer.git
synced 2026-06-20 20:00:37 +03:00
fix: xss bug
This commit is contained in:
+9
-3
@@ -66,8 +66,9 @@ export default {
|
|||||||
} else if (typeof this.value === 'function') {
|
} else if (typeof this.value === 'function') {
|
||||||
dataType = JsonFunction
|
dataType = JsonFunction
|
||||||
}
|
}
|
||||||
|
const toggle = this.keyName && (this.value && (Array.isArray(this.value) || typeof this.value === 'object'))
|
||||||
|
|
||||||
if (this.keyName && (this.value && (Array.isArray(this.value) || typeof this.value === 'object'))) {
|
if (toggle) {
|
||||||
elements.push(h('span', {
|
elements.push(h('span', {
|
||||||
class: {
|
class: {
|
||||||
'jv-toggle': true,
|
'jv-toggle': true,
|
||||||
@@ -85,7 +86,7 @@ export default {
|
|||||||
'jv-key': true
|
'jv-key': true
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: `${this.keyName}:`
|
innerText: `${this.keyName}:`
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@@ -110,7 +111,8 @@ export default {
|
|||||||
|
|
||||||
return h('div', {
|
return h('div', {
|
||||||
class: {
|
class: {
|
||||||
'jv-node': true
|
'jv-node': true,
|
||||||
|
'toggle': toggle
|
||||||
}
|
}
|
||||||
}, elements)
|
}, elements)
|
||||||
}
|
}
|
||||||
@@ -130,6 +132,10 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.toggle {
|
||||||
|
margin-left: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
& .jv-node {
|
& .jv-node {
|
||||||
margin-left: 25px;
|
margin-left: 25px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ export default {
|
|||||||
'jv-array': true,
|
'jv-array': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: '['
|
innerText: '['
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
this.ordered.forEach((value, key) => {
|
this.ordered.forEach((value, key) => {
|
||||||
@@ -124,7 +124,7 @@ export default {
|
|||||||
title: `click to reveal ${this.value.length} hidden items`
|
title: `click to reveal ${this.value.length} hidden items`
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: '...'
|
innerText: '...'
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ export default {
|
|||||||
'jv-array': true,
|
'jv-array': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: ']'
|
innerText: ']'
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default {
|
|||||||
'jv-boolean': true,
|
'jv-boolean': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: props.jsonValue.toString()
|
innerText: props.jsonValue.toString()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default {
|
|||||||
'jv-number': true,
|
'jv-number': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: props.jsonValue.toString()
|
innerText: props.jsonValue.toString()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ export default {
|
|||||||
'jv-object': true,
|
'jv-object': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: '{'
|
innerText: '{'
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ export default {
|
|||||||
title: `click to reveal object content (keys: ${Object.keys(this.ordered).join(', ')})`
|
title: `click to reveal object content (keys: ${Object.keys(this.ordered).join(', ')})`
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: '...'
|
innerText: '...'
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@@ -136,7 +136,7 @@ export default {
|
|||||||
'jv-object': true,
|
'jv-object': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: '}'
|
innerText: '}'
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,18 @@ export default {
|
|||||||
},
|
},
|
||||||
render (h, { props }) {
|
render (h, { props }) {
|
||||||
let value = props.jsonValue;
|
let value = props.jsonValue;
|
||||||
|
const islink = REG_LINK.test(value)
|
||||||
|
let domProps
|
||||||
|
|
||||||
if (REG_LINK.test(value)) {
|
if (islink) {
|
||||||
value = `<a href="${value}" target="_blank" style="color: #0366d6;">${value}</a>`;
|
value = `<a href="${value}" target="_blank" style="color: #0366d6;">${value}</a>`;
|
||||||
|
domProps = {
|
||||||
|
innerHTML: `"${value.toString()}"`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
domProps = {
|
||||||
|
innerText: `"${value.toString()}"`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return h('span', {
|
return h('span', {
|
||||||
@@ -23,7 +32,7 @@ export default {
|
|||||||
'jv-string': true,
|
'jv-string': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: `"${value.toString()}"`
|
...domProps
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default {
|
|||||||
'jv-undefined': true,
|
'jv-undefined': true,
|
||||||
},
|
},
|
||||||
domProps: {
|
domProps: {
|
||||||
innerHTML: props.jsonValue === null ? 'null' : 'undefined'
|
innerText: props.jsonValue === null ? 'null' : 'undefined'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user