是否可以使用函数从脚本访问值?
Is it possible to access a value from a script with a function?
我需要保存来自此脚本的电子邮件:
<script>
window.renderOptIn = function() {
window.gapi.load('surveyoptin', function() {
window.gapi.surveyoptin.render(
{
"merchant_id": 0000,
"order_id": "100101205",
"email": "tester@example.com",
"delivery_country": "XX",
"estimated_delivery_date": "2021-09-03"
});
});
}
</script>
有办法吗?它实际上在代码中,但我想不出获取它的方法。
上下文:
电子商务相关。该脚本位于“谢谢”页面上。我需要将电子邮件保存到一个变量中,以便我可以将其用于 google 的增强型转化跟踪。
因此您可以使用 querySelector 访问脚本标签。如果您可以将 id 附加到 script 标签,这样您就可以轻松获取它,那将是理想的。如果没有,也有解决方法。
您可以使用element.innerHTML访问脚本标签的内容。
然后,您必须应用正则表达式或字符串操作来获取您正在寻找的确切片段。
例如
const script = document.querySelector("#script_id")
const scriptText = script.innerText
const emailString = scriptText.match(/"email":.*,/)[0]
const email = emailString.split(":")[1].trim().replace(/[,(\")]/g,"")
这行得通。您可能需要稍微修改解析函数。但我希望方法是明确的
P.S。这是一种非常 hacky 的方式,应尽可能避免使用此类代码。但是如果非要这么做,我也想不出别的办法了。
访问 document.scripts 并过滤内容
正则表达式或拆分。
const code = [...document.scripts].filter(script => script.textContent.includes('surveyoptin'))
const match = code[0].textContent.match(/(?:render\(.*\s+)({.*\s+)+/s)
const str = match[1].split(");")[0]; // forgot how to ignore trailing stuff after the group: );
console.log(str)
const obj = JSON.parse(str); // fails on 0000
console.log(obj.email)
// alternative - this is inflexible on spacing etc:
console.log(
code[0]
.textContent
.split('"email": "')[1]
.split('"')[0]
)
<script src="x.js"></script>
<script>const survey = "Survey"; // dummy script</script>
<script>
window.renderOptIn = function() {
window.gapi.load('surveyoptin', function() {
window.gapi.surveyoptin.render(
{
"merchant_id": "0000",
"order_id": "100101205",
"email": "tester@example.com",
"delivery_country": "XX",
"estimated_delivery_date": "2021-09-03"
});
});
}
</script>
我需要保存来自此脚本的电子邮件:
<script>
window.renderOptIn = function() {
window.gapi.load('surveyoptin', function() {
window.gapi.surveyoptin.render(
{
"merchant_id": 0000,
"order_id": "100101205",
"email": "tester@example.com",
"delivery_country": "XX",
"estimated_delivery_date": "2021-09-03"
});
});
}
</script>
有办法吗?它实际上在代码中,但我想不出获取它的方法。
上下文:
电子商务相关。该脚本位于“谢谢”页面上。我需要将电子邮件保存到一个变量中,以便我可以将其用于 google 的增强型转化跟踪。
因此您可以使用 querySelector 访问脚本标签。如果您可以将 id 附加到 script 标签,这样您就可以轻松获取它,那将是理想的。如果没有,也有解决方法。
您可以使用element.innerHTML访问脚本标签的内容。 然后,您必须应用正则表达式或字符串操作来获取您正在寻找的确切片段。 例如
const script = document.querySelector("#script_id")
const scriptText = script.innerText
const emailString = scriptText.match(/"email":.*,/)[0]
const email = emailString.split(":")[1].trim().replace(/[,(\")]/g,"")
这行得通。您可能需要稍微修改解析函数。但我希望方法是明确的
P.S。这是一种非常 hacky 的方式,应尽可能避免使用此类代码。但是如果非要这么做,我也想不出别的办法了。
访问 document.scripts 并过滤内容
正则表达式或拆分。
const code = [...document.scripts].filter(script => script.textContent.includes('surveyoptin'))
const match = code[0].textContent.match(/(?:render\(.*\s+)({.*\s+)+/s)
const str = match[1].split(");")[0]; // forgot how to ignore trailing stuff after the group: );
console.log(str)
const obj = JSON.parse(str); // fails on 0000
console.log(obj.email)
// alternative - this is inflexible on spacing etc:
console.log(
code[0]
.textContent
.split('"email": "')[1]
.split('"')[0]
)
<script src="x.js"></script>
<script>const survey = "Survey"; // dummy script</script>
<script>
window.renderOptIn = function() {
window.gapi.load('surveyoptin', function() {
window.gapi.surveyoptin.render(
{
"merchant_id": "0000",
"order_id": "100101205",
"email": "tester@example.com",
"delivery_country": "XX",
"estimated_delivery_date": "2021-09-03"
});
});
}
</script>