javascript - 从 DOM 中已有的 JavaScript 中提取数据
问题描述
我正在尝试找到一种方法,使用标签管理器来触发一些 Javascript 来读取在 JS 函数中输出的数据。
功能如下:
<script>var ga = ga || [];
ga('require', 'ecommerce', 'ecommerce.js');
ga('ecommerce:addTransaction', {"id":"1031396","affiliation":"Purchases","revenue":"149.98","currency":"GBP","tax":0,"shipping":0,"city":"Example","region":"Example","country":"GB"});
ga('ecommerce:addItem', {"id":"1031396","sku":"000004","name":"Example","category":"Product: item","price":"80.000000","currency":"GBP","quantity":"1.00"});
ga('ecommerce:addItem', {"id":"1031396","sku":"000013","name":"Example","category":"Product: item","price":"49.980000","currency":"GBP","quantity":"1.00"});
ga('ecommerce:addItem', {"id":"1031396","sku":"item_adult","name":"Example","category":"Product: items","price":"20.000000","currency":"GBP","quantity":"1.00"});
ga('ecommerce:send');
</script>
本质上,我想获取此数据中所有 SKU 的数组,以便将其发送到另一个渠道。
我无权访问源代码,因此基本上使用现有代码是唯一的选择。
我只是对尝试提取此信息的方法一无所知。
解决方案
据我所知,分析代码不允许您读取通过该ga()
函数设置的属性。所以我能想到的唯一的、非常hacky和性能不佳的解决方案是通过Javascript进行一些抓取。
在自定义 HTML 标记中,您需要设置一个函数来检查页面中的脚本标记。由于脚本标签没有 id,您需要将它们全部收集起来,然后将它们的内容作为字符串读取,并查看字符串中的模式(基本上就像我对这个问题的回答一样,只有您在寻找对于“var ga = ga || [];”或类似的)。
然后,您可能会将结果字符串拆分为行(通过换行符分隔符)。您将遍历生成的数组。对于每一行,您将应用一个正则表达式来提取大括号之间的位。然后,您将 JSON.parse 应用于匹配项,并且您将能够访问每个对象的属性(或者,如果您比我更擅长正则表达式,您可以直接提取 sku 值)。您将其推入一个数组,然后(可能)将其推送到自定义标签中的数据层,以便您可以在标签中使用它。
虽然这可行,但它是一个非常丑陋的解决方案。最好与您的老板或客户交谈并正确完成此操作。如果你必须做这样的事情,请添加一个免责声明,你不能保证这在未来会起作用(通常如果你做过,你就拥有它,并且在你的余生中维护可怕的黑客真的会让你陷入困境从长远来看会下降)。
推荐阅读
- reactjs - 如何使用 Context API 更新组件提供者的状态
- powerbi - 隐藏另一个切片器的值的切片器
- c# - 如何使用 API 传输密码
- mongodb - 如何更新现有文档中的新数组
- powershell - 安装 dotnet core 问题
- python - 我想在列表中添加元素
- selenium-webdriver - 错误显示为“org.openqa.selenium.JavascriptException:javascript 错误:无法读取属性‘setAttribute’ of null”
- c - USB Linux API:从用户空间应用调用 ioctl 请求
- php - 追加到 MongoDB 中的数组 (PHP 7.2)
- ios - 如何在 Nativescript 中限制聊天气泡(标签)的宽度?