.replace() 无法在 JavaScript 中为 Google 标签管理器转义反斜杠
.replace() not working for escaping back slashes in JavaScript for Google Tag Manager
我正在尝试将架构动态填充到我公司的博客文章中。大多数事情都工作得很好,但是 URLs,出于某种原因,每个 / 后面都有转义字符。示例在架构标记中用下面的“**”表示
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "HHHunts Commitment To RVA",
"image": "",
"author": {
"@type": "Organization",
"name": "HHHunt"
"url": "https://hhhunt.com"
},
"publisher": {
"@type": "Organization",
"name": "HHHunt",
"logo": {
"@type": "ImageObject",
**"url": "https:\/\/assets-global.website-files.com\/61d6f3d648b8c96670b238ab\/61d86f26213077625ab3a90e_logo-130.png"**
}
},
"datePublished": "2022-03-28",
"articleBody": "When ... ", // shortened
**"thumbnailUrl": "https:\/\/assets-global.website-files.com\/61d6f3d648b8c989b9b238c0\/624311d33025d92e76fb34b9_Habitat-for-Humaity-(2).jpg",**
"timeRequired": "PT3M",
"description": "Growing up in Richmond, VA, Harry H. Hunt, III has always held a special place in heart for RVA and made a commitment to supporting and investing in the region.",
}
</script>
我替换转义字符的代码是:
function() {
var postUrl = document.getElementsByClassName('schema-blog-image')[0].innerText;
var cleanPostUrl = postUrl.replace(/[\]/g,"")
return cleanPostUrl;
}
其中 .schema-blog-image 是博客特色图片的 class 选择器。
在上面的 'url' 字段中,我可以使用 Google 跟踪代码管理器的 JavaScript 变量从HTML 使用相同的 class 名称。但是,当我尝试使用相同的 class 名称但对于“图像”使用上述函数时,它 returns 是一个空字符串(如上所示)。
一些谷歌搜索引导我尝试 return JSON.stringify(postUrl)
(同时删除 cleanPostUrl 变量),但结果只是 \x22\x22
。
当我在 W3 Schools Try It Yourself
编辑器上尝试上面的函数时,它运行得很好,所以我不确定还需要做什么才能使正则表达式工作。
None 替换了转义字符。
试试这个
var cleanPostUrl= JSON.stringify(postUrl);
var data = JSON.parse(cleanPostUrl);
所以,我按照在 Moz.com
上找到的指南解决了这个问题
现在的标签代码如下所示:
<script>
(function(){
var data = {
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": {{Post Title}},
"image": {{Post Image}},
"author": {
"@type": "Organization",
"name": "HHHunt",
"url": "https://hhhunt.com"
},
"publisher": {
"@type": "Organization",
"name": "HHHunt",
"logo": {
"@type": "ImageObject",
"url": {{Logo}}
},
},
"datePublished": {{ISO Date}},
"articleBody": {{Post Content}},
"thumbnailUrl": {{Post Image}},
"timeRequired": "PT" + {{Duration}} + "M", // I had to adjust this line to allow a string concat using a variable
"description": {{Meta Description}},
}
var script = document.createElement('script');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTagName('footer')[0].appendChild(script); // write the script to my <footer> tag
})(document);
</script>
我的变量只是原始元素属性(例如,图像是通过使用 DOM 元素变量获得的,针对我提供的 CSS 选择器,并使用 src 属性获取 URL).现在的不同之处在于,我的架构现在包含在函数内的一个变量中,我现在可以在其中将所有这些变量作为真正的字符串传递。从那里,我们可以创建一个 var 脚本,并使用它来创建一个具有我需要的属性的新脚本 HTML 元素,并将它插入到我需要的地方。
因为我能够在变量 'data' 本身中将这些变量用作真正的字符串,所以我不再需要担心转义字符。
希望这对其他人有帮助!
我正在尝试将架构动态填充到我公司的博客文章中。大多数事情都工作得很好,但是 URLs,出于某种原因,每个 / 后面都有转义字符。示例在架构标记中用下面的“**”表示
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "HHHunts Commitment To RVA",
"image": "",
"author": {
"@type": "Organization",
"name": "HHHunt"
"url": "https://hhhunt.com"
},
"publisher": {
"@type": "Organization",
"name": "HHHunt",
"logo": {
"@type": "ImageObject",
**"url": "https:\/\/assets-global.website-files.com\/61d6f3d648b8c96670b238ab\/61d86f26213077625ab3a90e_logo-130.png"**
}
},
"datePublished": "2022-03-28",
"articleBody": "When ... ", // shortened
**"thumbnailUrl": "https:\/\/assets-global.website-files.com\/61d6f3d648b8c989b9b238c0\/624311d33025d92e76fb34b9_Habitat-for-Humaity-(2).jpg",**
"timeRequired": "PT3M",
"description": "Growing up in Richmond, VA, Harry H. Hunt, III has always held a special place in heart for RVA and made a commitment to supporting and investing in the region.",
}
</script>
我替换转义字符的代码是:
function() {
var postUrl = document.getElementsByClassName('schema-blog-image')[0].innerText;
var cleanPostUrl = postUrl.replace(/[\]/g,"")
return cleanPostUrl;
}
其中 .schema-blog-image 是博客特色图片的 class 选择器。
在上面的 'url' 字段中,我可以使用 Google 跟踪代码管理器的 JavaScript 变量从HTML 使用相同的 class 名称。但是,当我尝试使用相同的 class 名称但对于“图像”使用上述函数时,它 returns 是一个空字符串(如上所示)。
一些谷歌搜索引导我尝试 return JSON.stringify(postUrl)
(同时删除 cleanPostUrl 变量),但结果只是 \x22\x22
。
当我在 W3 Schools Try It Yourself
编辑器上尝试上面的函数时,它运行得很好,所以我不确定还需要做什么才能使正则表达式工作。
None 替换了转义字符。
试试这个
var cleanPostUrl= JSON.stringify(postUrl);
var data = JSON.parse(cleanPostUrl);
所以,我按照在 Moz.com
上找到的指南解决了这个问题现在的标签代码如下所示:
<script>
(function(){
var data = {
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": {{Post Title}},
"image": {{Post Image}},
"author": {
"@type": "Organization",
"name": "HHHunt",
"url": "https://hhhunt.com"
},
"publisher": {
"@type": "Organization",
"name": "HHHunt",
"logo": {
"@type": "ImageObject",
"url": {{Logo}}
},
},
"datePublished": {{ISO Date}},
"articleBody": {{Post Content}},
"thumbnailUrl": {{Post Image}},
"timeRequired": "PT" + {{Duration}} + "M", // I had to adjust this line to allow a string concat using a variable
"description": {{Meta Description}},
}
var script = document.createElement('script');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTagName('footer')[0].appendChild(script); // write the script to my <footer> tag
})(document);
</script>
我的变量只是原始元素属性(例如,图像是通过使用 DOM 元素变量获得的,针对我提供的 CSS 选择器,并使用 src 属性获取 URL).现在的不同之处在于,我的架构现在包含在函数内的一个变量中,我现在可以在其中将所有这些变量作为真正的字符串传递。从那里,我们可以创建一个 var 脚本,并使用它来创建一个具有我需要的属性的新脚本 HTML 元素,并将它插入到我需要的地方。
因为我能够在变量 'data' 本身中将这些变量用作真正的字符串,所以我不再需要担心转义字符。
希望这对其他人有帮助!