将JS对象插入脚本标签而无需抓取语法

时间:2018-09-24 02:08:03

标签: javascript

所需的输出

<script type="text/javascript">
var = {
//myobject
}
</script>

当前思想

var fileRef = document.createElement('script');
fileRef.setAttribute('type','text/javascript');
var = { //blahblahblah }
fileRef.setAttribute('innerHTML', var); << this is wrong
document.head.appendChild(fileRef);

理想情况下,我需要使用与innerHTML类似的方法将变量注入脚本标签中

这是Janky,但客户要求以最佳方式编辑内联对象,以便束缚我的双手

1 个答案:

答案 0 :(得分:1)

如果唯一要做的就是将JavaScript对象添加到全局名称空间中,并且其中的内容严格限于字符串,数字和布尔值,那么可以通过以下方式安全地做到这一点:

let userEnteredString = '{"foo": "bar"}';
window[keyName] = JSON.parse(userEnteredString);

如果它可以包含上述类型的文字以外的值,则可以使用不安全的eval方法(不推荐!):

let existingValue = "bar";
let userEnteredString = '{"foo": existingValue}';
window[keyName] = eval(`(${userEnteredString})`);  // not safe, only use this when
                                                   // absolutely needed

请注意,尽管这两个代码片段在执行任何其他相关脚本标记之前具有相同的效果,但它们不会修改任何script标记。