javascript - 将字符串“对象”转换为对象
问题描述
我需要转换inlineScriptsTexts
为对象,因为我需要从中获取值。但我不知道,如何将此字符串解析为对象。[JSON.parse][1]
没有按预期工作。是否有一些解决方案,可以将此字符串转换为对象(如图像)?
window.onload = function() {
let objExist = false;
let inlineScripts = document.body;
let inlineScriptsBlocks = Array.from(inlineScripts.getElementsByTagName('script'));
inlineScriptsBlocks.forEach(scriptBlock => {
let inlineScriptsTexts = scriptBlock.innerText;
if (inlineScriptsTexts.includes('zvkDL')) {
objExist = true;
console.log(inlineScriptsTexts);
}
});
//console.log(objExist);
}
zvkDL = {
'language' : 'cs',
'currency' : 'czk',
'event': 'akurva',
'ecommerce': {
'purchase': {
'actionField': {
'id': 555,
'revenue': 535535,
'shipping': 3535,
}
}
},
'eventCallback': function() {
setGTMcookie( 555 ); // Jak se bude callback jmenovat nechám na vás. Jen to musí být srozumitelné. Pozor na scope JS callbacku.
},
'eventTimeout' : 2000,
'eventCookie': { 'name': 'dasd', 'expires': 'asdsadd', 'value': 'funguje to', }
};
解决方案
JavaScript 中提供的方法eval
用于执行包含 JavaScript 源代码的字符串。
在这种情况下,不能使用用于使用“JavaScript Object Notation”中的文本序列化一组受限数据对象的 JSON 字符串,因为 JSON 不支持序列化函数对象。
有两种主要的替代方案eval
:
Function
通过调用全局构造函数将文本转换为函数,或者- 将文本写入服务器上的文件并使用
<script>
标签将文件下载到浏览器。
调用eval
或Function
执行代码名声不好,在某些代码环境中可能会受到限制。
在采取任何这些方法之前,我会准确分析问题:字符串来自哪里,通过首先创建脚本来进一步解决源链上的问题是否会更好,是否会克隆现有的源对象而不进行序列化首先是可能的等等。
如果适用,请注意:textContent
HTMLScriptElement 的 仅当元素包含内联代码时才能用于访问代码。textContent
不会返回下载的脚本文件的代码内容。
推荐阅读
- java - 是否必须打包 maven 编译时依赖项以便在运行时访问?
- c# - 使用 ITextSharp 将阿拉伯文本写入 PDF
- reactjs - 当反应脚本被标记为开发依赖时如何进行反应构建
- python - 重复执行 cwd 和 listdir 时,Pysftp/Paramiko“没有这样的文件”
- pdb - Windows 10 更新/安全更新后程序无法运行:PDB 请求错误:404
- flutter - 颤振:在提供程序中使用颤振钩子时出现意外行为
- angular - 2 次调用 form.reset() 后,子组件不会从父组件重置
- flutter - Flutter:有没有人使用 Iterable SDK 和 Flutter App 进行推送通知
- django - 输入 texbox 上的 V 模型在 django for 循环中更新其他 v 模型输入文本上的文本
- python - on_delete_message 中的 Discord py 错误 -> 未知消息