Ошибка компилятора javascript

const and let are different ways to declare variables only available in ES6 (a version of JavaScript) or later. Google Tag Manager does not support ES6 as I found out today when I used another ES6 feature of arrow functions.

In your case, changing the const keyword, or any instance of let to the keyword var would likely fix your issue.

I see your actual problem was cookie consent, but if anyone runs into ES6 or Ecmascript 6 errors in GTM. Search the ES6 feature online for a replacement using ES5. Other acronyms are ES2016 vs ES2015. Don’t ask me about the naming convention because it is super confusing.

Another trick would be to paste your code into an online version of BabelJS and see what it spits out when you use the ES2015 checkbox. BabelJS is a transpiler/compiler that takes future syntax JS and converts it into older version syntax. For example, see the before and after code that was spit out:

Original ES6 Code (Uses arrow function, const, and let):

window.addEventListener("load", (event) => {
  const myVariable = "text";
  let anotherVariable = 8;
});

Output from BabelJS into ES2015/ES5:

window.addEventListener("load", function (event) {
  var myVariable = "text";
  var anotherVariable = 8;
});

I run a piece of code with first.js

var http = require("http");

http.createServer(function (request, response) {

   // Send the HTTP header
   // HTTP Status: 200 : OK
   // Content Type: text/plain
   response.writeHead(200, {'Content-Type': 'text/plain'});

   // Send the response body as "Hello World"
   response.end('Hello Worldn');
}).listen(8124);

// Console will print the message
console.log('Server running at http://127.0.0.1:8124/');

while i m running it with gitbash its giving desire output. but with node js command prompt its giving microsoft jscript compilation error.

Priya's user avatar

Priya

1,3596 gold badges21 silver badges41 bronze badges

asked Apr 11, 2016 at 5:37

Prayer's user avatar

1

Looks like you’ve just typed script’s name into the terminal window therefore asked windows to find proper interpreter for your script. You should try and interpret the script with nodejs instead:

node your-script.js

not just

your-script.js

answered Apr 11, 2016 at 7:40

MarengoHue's user avatar

MarengoHueMarengoHue

1,77913 silver badges31 bronze badges

The issue here could stem from several places. Most likely installation-based.

The following code (Taken from above)

var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello Worldn'); }).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');

Yields positive results when I attempt to load it in the browser.
I therefore recommend the following:

  1. Try run what I put into the code snippet window into a brand new first.js file in a brand new directory and from command line navigate to the directory and run the file with the command «Node first.js» (Without quotes naturally).

1.1 If using any editor aside from a plain text editor (notepad++, notepad, sublime etc) ensure the file is in-fact set to output plain-text (bone-head move but often overlooked)

  1. Reinstall node (Worth a shot)

  2. If all else fails and you have npm installed, type «npm install http» and re-run your first.js application

answered Apr 11, 2016 at 6:14

Greg Rebisz's user avatar

I was getting the same error repeatedly on my nodejs app and then realized I wrote only «index.js»(the script file name on the package.json file). So whenever I ran the command npm start it was giving me that error. I had nodemon installed on my app so I changed it to nodemon index.js after that it worked perfectly. I am attaching the screenshot here: code that I changed on package.json file

answered Nov 18, 2022 at 18:22

Dip Roy's user avatar

Dip RoyDip Roy

211 silver badge3 bronze badges

Problem in this line

"name": {{SCH Product - Device_Name}} {{SCH Device Memory}},

Correct way is:

"name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",

And you forgot one ;

Working code is:

  <script>
(function(){
var data = { 
    "@context": "http://schema.org/",
    "@type": "Product",
    "name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",
    "image": {{SCH Product - Device_Img}},
    "description": {{SCHEMA - Page Description}},
    "brand": {
        "@type": "Thing",
        "name": "Apple"
        },
            "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": "4.4",
            "ratingCount": "89"
            },
                "offers": {
                "@type": "AggregateOffer",
                "lowPrice": "100",
                "highPrice": "420",
                "priceCurrency": "USD",
                "itemCondition": "http://schema.org/UsedCondition",
                "availability": "http://schema.org/InStock",
                "seller": {
                    "@type": "Organization",
                    "name": "Ciclii"
                    }
                }
            };
var script = document.creatingElement('script');
script.type = "apllication/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTag('head')[0].appendChild(script);
})(document)
 </script>

Why is it happening?

If you will use only your varriable without quotes {{SCH Product - Device_Name}, GTM will compile it to something like that "name": google_tag_manager["GTM-XXXXXX"].macro('gtmX') google_tag_manager["GTM-XXXXXX"].macro('gtmX'). And this construction is not valid JS

But if you will place variable inside quotes, it will execute this variable and will render as "name": "string1 string2"

Problem in this line

"name": {{SCH Product - Device_Name}} {{SCH Device Memory}},

Correct way is:

"name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",

And you forgot one ;

Working code is:

  <script>
(function(){
var data = { 
    "@context": "http://schema.org/",
    "@type": "Product",
    "name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",
    "image": {{SCH Product - Device_Img}},
    "description": {{SCHEMA - Page Description}},
    "brand": {
        "@type": "Thing",
        "name": "Apple"
        },
            "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": "4.4",
            "ratingCount": "89"
            },
                "offers": {
                "@type": "AggregateOffer",
                "lowPrice": "100",
                "highPrice": "420",
                "priceCurrency": "USD",
                "itemCondition": "http://schema.org/UsedCondition",
                "availability": "http://schema.org/InStock",
                "seller": {
                    "@type": "Organization",
                    "name": "Ciclii"
                    }
                }
            };
var script = document.creatingElement('script');
script.type = "apllication/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTag('head')[0].appendChild(script);
})(document)
 </script>

Why is it happening?

If you will use only your varriable without quotes {{SCH Product - Device_Name}, GTM will compile it to something like that "name": google_tag_manager["GTM-XXXXXX"].macro('gtmX') google_tag_manager["GTM-XXXXXX"].macro('gtmX'). And this construction is not valid JS

But if you will place variable inside quotes, it will execute this variable and will render as "name": "string1 string2"

This is my tag:

<script>
    window.intercomSettings = {
        app_id: "fanwstw2"
    };
</script>
<script>
    (function() {
        var w = window;
        var ic = w.Intercom;
        if (typeof ic === "function") {
            ic('reattach_activator');
            ic('update', intercomSettings);
        } else {
            var d = document;
            var i = function() {
                i.c(arguments)
            };
            i.q = [];
            i.c = function(args) {
                i.q.push(args)
            };
            w.Intercom = i;

            function l() {
                var s = d.createElement('script');
                s.type = 'text/javascript';
                s.async = true;
                s.src = 'https://widget.intercom.io/widget/fanwstw2';
                var x = d.getElementsByTagName('script')[0];
                x.parentNode.insertBefore(s, x);
            }
            if (w.attachEvent) {
                w.attachEvent('onload', l);
            } else {
                w.addEventListener('load', l, false);
            }
        }
    })()
</script>

This is the error message

enter image description here

isherwood's user avatar

isherwood

56.3k16 gold badges108 silver badges151 bronze badges

asked Jan 25, 2018 at 10:27

Charlie Howes's user avatar

I had this issue as well, and I believe it’s because GTM, which is based on the ES5 engine, is seeing ES6 code and trying to parse it as ES5. It is likely coming from your l() function declaration within the if block. Try to move that out of the if block, like just before it and compile the tag again, like this:

(function() {
    var w = window;
    var ic = w.Intercom;

    // moved this out of if block
    function l() {
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://widget.intercom.io/widget/fanwstw2';
        var x = d.getElementsByTagName('script')[0];
        x.parentNode.insertBefore(s, x);
    }

    if (typeof ic === "function") {
        ic('reattach_activator');
        ic('update', intercomSettings);
    } else {
        var d = document;
        var i = function() {
            i.c(arguments)
        };
        i.q = [];
        i.c = function(args) {
            i.q.push(args)
        };
        w.Intercom = i;

        if (w.attachEvent) {
            w.attachEvent('onload', l);
        } else {
            w.addEventListener('load', l, false);
        }
    }
})()

answered Jan 25, 2018 at 16:26

nyuen's user avatar

nyuennyuen

8,7512 gold badges19 silver badges28 bronze badges

0

I can’t see any issue with your code, maybe it’s the parser being overly awkward. It could also be caused by you wrapping within an IIFE.

How about changing this line below (just to rule it out being weird)..

ic('update', intercomSettings);

To this…

ic('update', w.intercomSettings);

answered Jan 25, 2018 at 10:36

curv's user avatar

curvcurv

3,7574 gold badges32 silver badges48 bronze badges

5

I have found cookie script from a website https://allies4me.com/analytics/google-tag-manager-set-cookies/#comments as I am completely new to Google tag manager and not very html savvy.

I followed all instructions from the website above but when I come to click on Preview in GTM it pops up with Validate Container and the following errors:

Cookie Setter Error at line 3, character 100: Parse error.’}’ expected
Here is the code:

<script>
function setPersistentCookie(name, value, expires) {
 var cookie = name + "=" + value + "; path=/; domain=." + 
location.hostname.replace(/^www./i, "");</pre>
if (typeof expires !== "undefined") {
var now = new Date();
now.setTime(now.getTime() + expires * 24 * 60 * 60 * 1000);
cookie += "; expires=" + now.toUTCString();
}

document.cookie = cookie;
}

function setSessionCookie(name, value) {
var cookie = name + "=" + value + "; path=/; domain=." + 
location.hostname.replace(/^www./i, "");

document.cookie = cookie;
}

function getCookie(name) {
var cookies = document.cookie.split(";"),
toReturn;

for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf(name + "=") === 0) {
toReturn = cookie.substring((name + "=").length, cookie.length);
}
}

return toReturn;
}
</script>

Paid Customer Error at line 3, character 27: Parse error. primary expression expected

<script>
var cookieName = "PaidCustomer"; 
var cookieValue = "true";</pre>
setPersistentCookie(cookieName, cookieValue, 365); // set for 1 year
</script>

Page View Count Error at line 3, character 49: Parse error.’}’ expected

<script>
(function() {
 var pageviewCount = getCookie("pageviewCount");</pre>
if (typeof pageviewCount === "undefined") {
pageviewCount = 1;
} else {
pageviewCount++;
}</pre>
setPersistentCookie("pageviewCount", pageviewCount, 30);

})();
</script>

Can someone please show me what is wrong? As I have no idea.

I have found cookie script from a website https://allies4me.com/analytics/google-tag-manager-set-cookies/#comments as I am completely new to Google tag manager and not very html savvy.

I followed all instructions from the website above but when I come to click on Preview in GTM it pops up with Validate Container and the following errors:

Cookie Setter Error at line 3, character 100: Parse error.’}’ expected
Here is the code:

<script>
function setPersistentCookie(name, value, expires) {
 var cookie = name + "=" + value + "; path=/; domain=." + 
location.hostname.replace(/^www./i, "");</pre>
if (typeof expires !== "undefined") {
var now = new Date();
now.setTime(now.getTime() + expires * 24 * 60 * 60 * 1000);
cookie += "; expires=" + now.toUTCString();
}

document.cookie = cookie;
}

function setSessionCookie(name, value) {
var cookie = name + "=" + value + "; path=/; domain=." + 
location.hostname.replace(/^www./i, "");

document.cookie = cookie;
}

function getCookie(name) {
var cookies = document.cookie.split(";"),
toReturn;

for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf(name + "=") === 0) {
toReturn = cookie.substring((name + "=").length, cookie.length);
}
}

return toReturn;
}
</script>

Paid Customer Error at line 3, character 27: Parse error. primary expression expected

<script>
var cookieName = "PaidCustomer"; 
var cookieValue = "true";</pre>
setPersistentCookie(cookieName, cookieValue, 365); // set for 1 year
</script>

Page View Count Error at line 3, character 49: Parse error.’}’ expected

<script>
(function() {
 var pageviewCount = getCookie("pageviewCount");</pre>
if (typeof pageviewCount === "undefined") {
pageviewCount = 1;
} else {
pageviewCount++;
}</pre>
setPersistentCookie("pageviewCount", pageviewCount, 30);

})();
</script>

Can someone please show me what is wrong? As I have no idea.

Here’s the code in its entirety:

<style>
.intercom-launcher {
backface-visibility: hidden;
background: {{color_black}};
border-radius: 50%;
bottom: 20px;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.06), 0 2px 32px rgba(0, 0, 0, 0.16);
cursor: pointer;
font-family: Helvetica, Arial, sans-serif;
height: 0;
opacity: 0;
outline: 0;
position: fixed;
right: 20px;
transform: scale(0.5);
transform-origin: center;
transition: opacity 0.25s ease, transform 0.25s ease;
width: 0;
z-index: 2147483000;
}

.intercom-launcher:focus {
outline: 0;
}

.intercom-launcher.intercom-booted {
height: 50px;
opacity: 1;
transform: scale(1);
width: 50px;
}

.intercom-launcher * {
cursor: pointer;
}

.intercom-unread-count {
backface-visibility: hidden;
background: {{color_black}};
border-radius: 10px;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15);
box-sizing: border-box;
color: #fff;
font-size: 12px;
height: 20px;
line-height: 20px;
min-width: 20px;
opacity: 0;
padding: 0 4px;
position: absolute;
right: -2px;
text-align: center;
top: -2px;
transform: scale(0.5);
transform-origin: center;
transition: opacity 0.15s ease, transform 0.15s ease;
}

.intercom-unread-count.active {
opacity: 1;
transform: scale(1);
}

.intercom-icon-open,
.intercom-icon-close {
background-position: 50%;
background-repeat: no-repeat;
border-radius: 50%;
bottom: 0;
position: absolute;
top: 0;
transition: transform 0.16s linear, opacity 0.08s linear;
width: 100%;
}

.intercom-icon-open {
/* below is a data uri of the open icon */
/* change it if you’d like a different icon */
background-image: url(‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABICAYAAABGOvOzAAAAAXNSR0IArs4c6QAABrRJREFUeAHtW0tMJFUUlQZ7YGgQmYHGQQYcQV2YIAmJG9igCQlxRiJRAmYwcSERNkQSdhMJCyGRjRsTosQPK0N0gREEMokaMiREERZoEJ2F/P+B8P+155R929fVTVXTfKQrdZPLq3rv1n33nHffq08/oh45XqKOb4rIFk+wqIOBVOvkWMpgPi5znYCWkrGqxwGxEyjVAY0eHR1N3d3dbTo6Ohr2eDxr0EiRNcT8C2JvHB4eTiEWLybBh9NAkUYN/ObmZinQrkYKYoM4V9bX1+8AriEJKvgYXPAqHB4aOI20pgNgegUkxEA5wIJXO8G5Jlplb29vssvl+hw1NLSKRAPTF93d3Y8DkA+8gJMKpsijSP3GSBveUOMFtnvECCVWDbeMspDgcDqdTBVLCrBxLTCcAo7o6OhsS6IHKGDLUQjQYOozIArymFUJ8GKTbGcZsNAJIVblIACzClhjxMrIFWw+rCoBbPc1KMZWO/TDqCfAamBN8dgEmFJkcQM7Ayw+wKbw7AwwpcjiBnYGWHyATeHZGWBKkcUN7Ayw+ACbwrMzwJQiixvYGWDxATaFZ2eAKUUWN7AzwOIDbArPzgBTiixuYGeAxQfYFJ6dAaYUWdzAzoCTDvDe3t4ENhx9d3h4uHzSa8/R/gjbX35EbH+F0wd/LeWemSvQBKP9Nth3N5acnJwBuxvl5eXPbGxsfG9kfxFtBN3X18etL+mMDTH+ZtQvMUKJVfYJaT+Jh0TA4uJiGy50Q1O96h4fH689ODiYM+r0PNqwEXJzdnb2w6KiokxvTIwrbXl5+ROj/mATPgHb29s/wcF1aDKUW85YppSUlGROTk6+DyKmjTo/izZMvXUMxMeNjY3Ps2/oNW8cjOU6Yhww6gc24RNAx1tbW1+3tLTc9DpKRJkE1YjIyMi4ge21VVgjvsUIbRgFcsK2A/Q7MDEx8V5ZWdkt9CfA2Tf3NCW2trZmwuYbM7+wPR0B7ADgZubn5+/CWTzUxQCgQgQzJLWgoODm0NDQG3Nzcx8hsB+QHYtmwUk703tnZ+dXpPNnY2Nj79TX1z8Hn0xxFTj7ZN+uhYWFt3FNSNMQ9n4EcAGk8nbIbaROBLGOMiQBqAczMzONmZmZD3CB6ov+qOJba6uqqkosLS19Mi0t7Rp2bibFxMQ4HQ5HNNIaa9fuFlJ7CRk029DQMIdruatb9Mh7zFLUMz09/ZLb7b6H7W/5qA9JsFOMxO1BD6D0FfoiKCOkL/f39weXlpbuVlZWcl1gVpBldsT0ZGbIesH5ygyhcjT1ynrayLzmdVqKo6RPF+Z+6srKyrsgbUQfRyjnXj/h3QXMOkAaLiN1P0Xa36mtrSUImSIMXiWFoIQcmcdSR+KoGmCUrra2tieQHW8iS75CDKdaW7x+fQSoaXviKQBnRrKDKTKE7PgZa8AIAPyJjdgP6+rqNpSL2L+IJyUlJaq9vT0lNzf3VkJCwrNxcXEvYHtrPqZJLow4pU4t+ikQjIA19KIGdupOdQ62MIrL0G3U70K1ZxAElgBl1vD83ERPAEfdTxDYijcQv/ozPLkK/9QzdBm+K31aefBo+Xv47iLvSpUA7ZazurraFXkwwo84gIDq6uovcYv5O3yXkXWlEMDRp3i6urq2BwcH38JasPlvlbX/CgFEKU9Yh4WFhSP9/f0luIX9YW34/z2+EieXZd6CqPy/mpisrKwrPT09t9PT04txP34KKzcfTi5s+UZ/eARwJFJx7ETfpxb48XsUFjAsRZkVvD1ShRDWSbbINai6ENH6u3//fn5eXl5FUlLSbYDgS1BYYkQAHaok6MGTgP8FvBoXXofjm5ubb+PVuyI2NvZFBn0SOY4A+hBwKgk8ltFX20/S52ltJR41Fi2mjo6Op4uLiyvxKex1vBHyK5WpGBHAiwWkHKud69tMOztDA4lDBoMlM1Q7z87OdnZ2dr6ck5NTER8fX4T6gCdciUVPgNSrpXQmpXQqU+KiS1mPuDBzIYyFXoXqP8Tw1drd1NSUOzU19QGeaB/iVh4gsOFC7nsbxPGxIgRchlIdBBJCMggiDkoyCIqv0/x+wBcqTgf3wMDAa/g814nX9G1hAvUkLiQCYHcpRD8AKhmSFUIGvz/wNuf3ea6mpiYbX48a8FwzijbaMJOYyZfklQyRhCgkQxU9OTwXgtSS9XzaPYTyU5h8DjvSO0RbRIg+bjlnSSV4tZR239Mu2nnskQYcR6zoMfA8mBIgs0AD7i39bns0iHRRyZBjKQWb78WPFfpGMYr0Mhgu1gl4H75ghr5Gixwch1Ej4x/FzutRzMchPgAAAABJRU5ErkJggg==’);
background-position: 50% 70%;
background-size: 67% 64%;
opacity: 1;
transform: rotate(0deg) scale(1);
}

.intercom-open .intercom-icon-open {
opacity: 0;
transform: rotate(30deg) scale(0);
}

.intercom-icon-close {
/* below is a data uri of the close icon */
/* change it if you’d like a different icon */
background-image: url(‘data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcBAMAAACAI8KnAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAIVBMVEUAAAD///////////////////////////////////8AAADPn83rAAAACXRSTlMACq47u/I8r7wWzHxoAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAJJJREFUGNNdzzEKhDAQBdAvwtYWW9hbbSdCDrBnWBDS2Sx7A8HSKwgic1tNxj/jmirDC5P/UTSw01V4ri2nMr7xkg/HIAu+Qi6j9HhEcpB1gHFGGCuSTyQTlQ2Vg3ic4x49TVpzwcQXvI+3x/+r0p9eLAfyYhrIWNOSmfZkVlH2Kpm9Z+bJeh68oSYmnlGMnv1X7RZ2SET5id+LAAAAAElFTkSuQmCC’);
background-size: 25%;
opacity: 0;
transform: rotate(-30deg);
}

.intercom-open .intercom-icon-close {
opacity: 1;
transform: rotate(0deg);
}
</style>
<script>
var launcher = document.querySelector(‘.intercom-launcher’);
var unreadCount = launcher.querySelector(‘.intercom-unread-count’);

// Initialize Intercom
window.Intercom(‘boot’, {
app_id: {{intercom_chat_widget_id}},
custom_launcher_selector: ‘.intercom-launcher’
});

// Register callbacks
window.Intercom(‘onShow’, function () { launcher.classList.add(‘intercom-open’) });

window.Intercom(‘onHide’, function () { launcher.classList.remove(‘intercom-open’) });

window.Intercom(‘onUnreadCountChange’, function (count) {
unreadCount.textContent = count;
if (count) {
unreadCount.classList.add(‘active’);
} else {
unreadCount.classList.remove(‘active’);
}
});

// Wait for Intercom to boot (max 30 seconds)
var timeout = setTimeout(function () { clearInterval(interval) }, 30000);
var interval = setInterval(function () {
if (window.Intercom.booted) {
// Add class to show the launcher
launcher.classList.add(‘intercom-booted’);
clearInterval(interval);
clearTimeout(timeout);
}
}, 100);
</style>

Этот триггер активирует теги, когда на сайте не удается перехватить исключение JavaScript (window.onError). Он нужен для сохранения сообщений об ошибках в инструментах аналитики. Для извлечения и передачи сообщения об ошибке при срабатывании тега используйте переменную «Ошибка JavaScript».

Чтобы настроить триггер, выполните следующие действия:

  1. Нажмите Триггеры затем Создать.
  2. Нажмите Настройка триггера и среди типов триггеров выберите Ошибка JavaScript.

Когда триггер срабатывает, подставляются значения следующих переменных:

  • Сообщение об ошибке. Текст сообщения об ошибке JavaScript.
  • URL ошибки. URL страницы, где возникла ошибка.
  • Строка ошибки. Номер строки кода, в которой произошла ошибка.

Триггер «Ошибка JavaScript» не регистрирует ошибки, которые произошли до загрузки кода Менеджера тегов. Он сообщает только о неперехваченных исключениях.

  • Типы триггеров
  • Как работают триггеры
  • Встроенные переменные для веб-контейнеров
  • События Google Аналитики

Эта информация оказалась полезной?

Как можно улучшить эту статью?

Я получаю следующее сообщение об ошибке в Диспетчере тегов Google:

Ошибка в строке 6, символ 282: эта языковая функция поддерживается только для режима ECMASCRIPT6 или лучше: объявление функции с блочным ограничением. Используйте —language_in = ECMASCRIPT6 или ECMASCRIPT6_STRICT или выше, чтобы включить функции ES6.

при добавлении этого тега фрагмента внутренней связи

<script>
    window.intercomSettings = { app_id: {{intercom_chat_widget_id}} };
</script>

<script>
    (function () { var w = window; var ic = w.Intercom; if (typeof ic === "function") { ic('reattach_activator'); ic('update', intercomSettings); } else { var d = document; var i = function () { i.c(arguments) }; i.q = []; i.c = function (args) { i.q.push(args) }; w.Intercom = i; function l() { var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://widget.intercom.io/widget/{{intercom_chat_widget_id}}'; var x = d.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); } if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })()
</script>

Для этого раздела кода i = function() {

Любая идея, что происходит? Очень ценили ребята! :)

Спасибо,

Чарли

22 фев. 2018, в 10:10

Поделиться

Источник

2 ответа

Это работало для меня в Диспетчере тегов Google:

<script>
    window.intercomSettings = { app_id: {{intercom_chat_widget_id}} };
</script>

<script>
    (function () { var w = window; var ic = w.Intercom; if (typeof ic === "function") { ic('reattach_activator'); ic('update', intercomSettings); } else { var d = document; var i = function () { i.c(arguments) }; i.q = []; i.c = function (args) { i.q.push(args) }; w.Intercom = i; var l = function () { var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://widget.intercom.io/widget/{{intercom_chat_widget_id}}'; var x = d.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); }; if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })()
</script>

Что здесь изменилось, так это то, что

function l() {... }

был изменен на

var l = function() {... };

vinoaj
22 фев. 2018, в 08:24

Поделиться

Вам нужно объявить переменную, используя ключевое слово var.

Вы в настоящее время сравниваете что-то с несуществующей переменной, вы также используете строгое равенство, что невозможно, потому что нет типа, чтобы квалифицировать строгое равенство, обходное решение vinoaj — это то, что вы хотите.

Neil Meyer
24 фев. 2018, в 16:16

Поделиться

Ещё вопросы

  • 1python-daemon and logging: установить уровень ведения журнала в интерактивном режиме
  • 0MySQL оператор внутреннего соединения
  • 1Маркеры карты в MapView — масштабируйте их в анимации увеличения
  • 0обслуживающих angularjs страниц с узлом
  • 0Определение шаблонов функций
  • 1Таймер Swing перестает вызывать actionPerformed (), когда мышь движется внутри JFrame
  • 0QTreeWidget childAt (int x, int y) возвращает NULL
  • 1Как запретить Java стирать контент, если экран свернут?
  • 0Вставьте CSS во внешнюю таблицу стилей с помощью jquery
  • 1Нажмите кнопку, чтобы запустить функцию JavaScript без JQuery
  • 0Что касается условий и || оператор в C ++
  • 1Настройка Fixer.io, Python
  • 1Как внести изменения в phoneGap (Apache Cordova) Api
  • 1ComboStore не загружает данные
  • 0Найдите в строке запятую, затем пробел, а затем число
  • 1Строка не была распознана как действительная дата и время
  • 1Сохранить результаты из нескольких страниц в один файл JSON с помощью CasperJS
  • 0GeoServer — Добавить слой с REST API (используя PHP)
  • 0Обмен синтаксиса AngularJS вызывает ошибку
  • 1Android — Какие классы использовать для разработки игр пользовательского интерфейса
  • 1Android: Как запустить внешнюю активность в процессе текущей активности?
  • 0Как получить фактический видовой экран мобильного устройства с размером метапортпорта?
  • 1Удаление всевозможных лишних пробелов между предложением и абзацем
  • 1Android — спиннеры внутри ListView
  • 1невозможно воспроизвести звук с помощью Android MediaPlayer в диалоговом окне?
  • 0Наблюдаю за сообщением в iframe
  • 1Нажмите клавишу в любом месте формы
  • 1Проблема при запуске нескольких пакетных файлов из одного пакетного файла
  • 1Проверьте данные временного ряда на отсутствие значений
  • 1Выделите строку ListView на основе идентификатора
  • 0jQuery Tabs — несколько блоков вкладок на одной странице
  • 0относительно угловой директивы js ng-repeat
  • 0Как рассчитать процент при чтении файла?
  • 0Regex группа повторного захвата в PHP
  • 1Можете ли вы развернуть приложение Android на Google App Engine?
  • 1Как найти Xpath элемента в соответствии с HTML через Selenium и Python
  • 1Динамически добавлять ключи из содержимого массива
  • 1JS Достижение и использование переменной родительского объекта
  • 0Как добавить текст в текстовое поле с полем ввода и удалить его из текстового поля с помощью Angular JS?
  • 0Ошибка параметра / аргумента карты (решение найдено)
  • 1Как использовать служебное свойство в маршруте?
  • 1почему происходит сбой в GWT dev mode «restart server»?
  • 1Uncaught TypeError: Не удалось выполнить ‘appendChild’ на ‘Node’: параметр 1 не относится к типу ‘Node’. на HTMLButtonElement.comm
  • 1Создать категориальный столбец на основе строковых значений
  • 0Нормализация данных с использованием lodash, javascript
  • 1Не удалось загрузить файл или сборку WPFToolkit
  • 0Управлять результатами, хранящимися в «обещании»
  • 1Winforms / Devexpress / Tab Control разделение концерна / Общая раскладка кода
  • 1Entity Framework 6 Переключение между поставщиками БД
  • 0Строка поиска в текстовом файле, которая начинается с определенного слова и заканчивается другим конкретным словом

Сообщество Overcoder

Спасибо за внимание, я не технический специалист, так что проявите терпение.

Я использую JavaScript для применения динамических переменных в моем коде JSON-LD для целей SEO (структурированных данных). Я столкнулся с проблемой, что каждый раз, когда я пытаюсь просмотреть или отправить теги, я получаю эту ошибку:

Проверить контейнер

В контейнере есть следующие ошибки:

Компилятор JavaScript

Ошибка продукта — схема Apple
Ошибка в строке 36, символ 9: ошибка синтаксического анализа. ‘}’ ожидается

Вот мой код:

    <script>
    (function(){
    var data = { 
        "@context": "http://schema.org/",
        "@type": "Product",
        "name": {{SCH Product - Device_Name}} {{SCH Device Memory}},
        "image": {{SCH Product - Device_Img}},
        "description": {{SCHEMA - Page Description}},
        "brand": {
            "@type": "Thing",
            "name": "Apple"
            },
                "aggregateRating": {
                "@type": "AggregateRating",
                "ratingValue": "4.4",
                "ratingCount": "89"
                },
                    "offers": {
                    "@type": "AggregateOffer",
                    "lowPrice": "100",
                    "highPrice": "420",
                    "priceCurrency": "USD",
                    "itemCondition": "http://schema.org/UsedCondition",
                    "availability": "http://schema.org/InStock",
                    "seller": {
                        "@type": "Organization",
                        "name": "Ciclii"
                        }
                    }
                }
    var script = document.creatingElement('script');
    script.type = "apllication/ld+json";
    script.innerHTML = JSON.stringify(data);
    document.getElementsByTag('head')[0].appendChild(script);
    })(document)
     </script>

Я использовал эту статью как источник:

https://moz.com/blog/using-google-tag-manager-to-dynamically-generate-schema-org-json-ld-tags

Пожалуйста, поделитесь своими мыслями или советами, буду очень признателен! — заранее спасибо.

1 ответ

Лучший ответ

Проблема в этой строке

"name": {{SCH Product - Device_Name}} {{SCH Device Memory}},

Правильный способ:

"name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",

И вы забыли одну ;

Рабочий код:

  <script>
(function(){
var data = { 
    "@context": "http://schema.org/",
    "@type": "Product",
    "name": "{{SCH Product - Device_Name}} {{SCH Device Memory}}",
    "image": {{SCH Product - Device_Img}},
    "description": {{SCHEMA - Page Description}},
    "brand": {
        "@type": "Thing",
        "name": "Apple"
        },
            "aggregateRating": {
            "@type": "AggregateRating",
            "ratingValue": "4.4",
            "ratingCount": "89"
            },
                "offers": {
                "@type": "AggregateOffer",
                "lowPrice": "100",
                "highPrice": "420",
                "priceCurrency": "USD",
                "itemCondition": "http://schema.org/UsedCondition",
                "availability": "http://schema.org/InStock",
                "seller": {
                    "@type": "Organization",
                    "name": "Ciclii"
                    }
                }
            };
var script = document.creatingElement('script');
script.type = "apllication/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTag('head')[0].appendChild(script);
})(document)
 </script>

Почему это происходит?

Если вы будете использовать только свою переменную без кавычек {{SCH Product - Device_Name}, GTM скомпилирует ее во что-то вроде этого "name": google_tag_manager["GTM-XXXXXX"].macro('gtmX') google_tag_manager["GTM-XXXXXX"].macro('gtmX'). И эта конструкция не является действительной JS

Но если вы поместите переменную в кавычки, она выполнит эту переменную и отобразит как "name": "string1 string2"


1

Victor Leontyev
10 Июн 2017 в 17:10

В этой статье мы рассмотрим, как с помощью GTM легко настроить отслеживание переходов на несуществующие страницы вашего сайта.

Прежде чем приступить к настройке отслеживания 404 ошибок, убедитесь в том, что на сайте корректно установлен контейнер GTM и что через него встроен Google Analytics. О том, как правильно установить Google Tag Manager, мы писали в статье «Руководство по установке и настройке Google Tag Manager для новичков».

Шаг 1. Создайте переменную

Для этого выполните следующие действия:

А. На панели навигации слева перейдите по ссылке «Переменные».
Б. В разделе «Пользовательские переменные» нажмите на кнопку «Создать».
В. Придумайте название для переменной.

Мы назвали Http Request. Если вы назовете подругому, измените название и в коде следующей переменной. 

Г. Выберите тип переменной — «Собственный код JavaScript»

Д.  Вставьте следующий JavaScript код:

function getReq(){
 	var req = false;
	if (window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch (e) {
			req = false;
	 	}
	} else if (window.ActiveXObject){
	  	try {
			req = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (e) {
			req = false;
		}
	}
	if (!req){}
	return req;
}

Собственный код JavaScript в GTM

Шаг 2. Создайте еще одну переменную

Вторая переменная будет обращаться к первой и отдавать код ответа сервера

Для этого выполните те же действия, что и при создании первой переменной, только придумайте другое название (Мы назвали «Код ответа сервера») и вставьте следующий JavaScript код:

function() {
	var req = {{Http Request}};

	try {
		req.open('GET', '{{Page URL}}', false);
		req.send('');
	} catch (e) {
		success = false;
		error_msg = "Error: " + e;
	}

	return req.status;
}

Собственный код JavaScript в GTM

Шаг 3. Создайте триггер с такими параметрами:

Тип триггера: «Просмотр страницы»
Условия активации: «Некоторые просмотры страниц»
Условие, при котором должен активироваться триггер: код ответа сервера содержит 404

Настройка триггера «Просмотр страницы»

Шаг 4. Создайте тег с такими параметрами:

Тип тега: «Universal Analytics»
Тип отслеживания: Событие
Категория: мы назвали «error404»
Действие: выберите значение {{Page URL}}, чтобы увидеть, на какой странице сработало событие

Триггер активации: триггер, созданный на предыдущем шаге

Создание триггера в GTM

Шаг 5. Проверьте и опубликуйте тег

В режиме предварительного просмотра перейдите на несуществующую страницу вашего сайта. Если после нажатия на кнопку контейнер в консоли отобразился под строкой «Tags Fired On This Page», значит, тег установлен без ошибок.

Проверка и публикация триггера

После того как вы убедитесь в правильной настройке тега, настройте отслеживание цели в Google Analytics.

Для этого создайте и настройте новую цель в Google Analytics. Информацию, которые вы указали при настройке тега в GTM, продублируйте при настройке цели в Google Analytics.

Создание и настройка цели в Google Analytics

Шаг 6. Проверьте, всё ли вы сделали правильно

Достижением цели станет переход на несуществующую страницу вашего сайта. Перейдите по ней и посмотрите событие в Google Analytics. Для этого перейдите в «Отчёты» — «В режиме реального времени» — «События».

Просмотр события в Google Analytics

Таким образом, мы настроили отслеживание 404 ошибок без вмешательства в исходный код страниц.

Еще статьи по теме:
Отслеживание отправки форм на сайте с помощью GTM
Отслеживание кликов в Google Analytics с помощью Google Tag Manager
Настройка отслеживания e-commerce с помощью Google Tag Manager

Еще по теме:

  • Сезонность запросов в Яндекс и Google или как развивать сезонный проект
  • Как собирать сезонные запросы Виды сезонных запросов Инструменты для определения сезонности Как и когда собирать сезонные фразы? Сезонность запросов в Key Collector Как продвигать сайт…

  • Шеф, все пропало, или Как сделать базовый аудит сайта своими руками
  • Сайт потерял трафик или позиции. Для того чтобы исправить ситуацию, важно понять причину. Сегодня мы расскажем, как провести первичную диагностику сайта. Статья будет полезна начинающим SEO-специалистам…

  • Как сделать контент релевантнее и заставить сайт ранжироваться выше
  • Как сделать контент более релеватным и ранжироваться выше – читайте, какие 10 шагов нужно сделать, чтобы соответствовать ожиданиями пользователей и поисковых систем. Своим опытом делится…

  • Как выявить смысловые дубли и избавиться от них
  • «На моем сайте только уникальные тексты». В чем же дело? Почему страницы выпадают из индекса, падают позиции, а релевантная страница, по мнению ПС, постоянно меняется?…

  • «Каннибализация» ключевых слов: как не потерять трафик из-за ошибок в определении релевантной страницы
  • Возможно, вы не слышали о таком понятии, как каннибализация ключевых слов, но вы наверняка сталкивались с этим явлением, если занимаетесь продвижением сайтов или сами являетесь…


SEO-аналитик

Оптимизирую сайты с 2009 года. Люблю сложные кейсы, которые оказались не по зубам специалистам с других компаний. Делаю очень подробные аудиты.

Пишу статьи-инструкции на блог SiteClinic по SEO-инструментам и аналитике.

Любимая цитата: Чтобы добиться успеха, надо искренне любить то, чем вы занимаетесь.

Есть вопросы?

Задайте их прямо сейчас, и мы ответим в течение 8 рабочих часов.

#javascript #google-tag-manager

#javascript #google-tag-manager

Вопрос:

В настоящее время у меня есть скрипт в Google Tag Manager, который, когда я собираюсь опубликовать, выдает мне x 2 ошибки компилятора JavaScript

 JavaScript compiler error   

Error at line 3, character 7: This language feature is only supported for ECMASCRIPT6 mode or better: const declaration.

Error at line 4, character 18: This language feature is only supported for ECMASCRIPT6 mode or better: arrow function.
  

Вот мой код:

 <script>
    (function() {
      const h4 = document.querySelectorAll('.h4');
      h4.forEach(el => {
        el.innerHTML = el.innerHTML.replace(/sweater/gi, 'jumper');
      });
    })();
</script>  

Это работает правильно в DevTools. Существует ли универсальное решение для всех этих ошибок или оно настраивается индивидуально в зависимости от вашего кода?

Спасибо,

Комментарии:

1. Согласно Google ‘Изолированный JavaScript основан на ECMAScript 5.1. Доступны некоторые функции ECMAScript 6, такие как функции со стрелками и объявления const / let.’ — developers.google.com/tag-manager/templates /… . Но, похоже, они не разрешены при публикации. Я думаю, единственное надежное решение — не использовать их, или вы можете просто настроить ECMAScript 6 при публикации?

2. @Toby, это относится только к пользовательским шаблонам. Пользовательские HTML-теги вообще не поддерживают ES6.

Ответ №1:

Я не знаю Google tag manager. Возможно, вы можете настроить это для поддержки ECMASCRIPT6.

Если вы хотите, чтобы это работало на более старой версии ECMASCRIPT, тогда вы можете заменить const на var и использовать анонимную функцию вместо функции со стрелкой.

 (function() {
  var h4 = document.querySelectorAll('.h4');
  h4.forEach(function(el) {
    el.innerHTML = el.innerHTML.replace(/sweater/gi, 'jumper');
  });
})();  
 <h4 class="h4">Black sweater</h4>  

Комментарии:

1. Это сработало отлично! Спасибо за разрешение и отметку обратной связи

Это связано с функцией «Автоматическая точка с запятой Javascript».

Я помещал слово «функция» в кавычки, потому что это действительно ничего, кроме — это откровенно немного катастрофы; одно из худших проектных решений, которые я знаю на языке.

В принципе, язык JS предназначен для того, чтобы все утверждения заканчивались точкой с запятой, но исходный дизайн языка делал скидку для кодеров, которые его забыли, и поэтому, если он видит разрыв строки без полуколонии, он пытается угадать, должен ли быть там.

К сожалению, есть случаи, когда это приводит к двусмысленности и ошибкам, а утверждения return, вероятно, являются наихудшими для этого.

В последнем примере { для возвращаемого объекта находится в строке после инструкции return. Это классический случай для такого рода ошибок. JS автоматически вставляет полуточку после return, и объект, который вы планировали вернуть, игнорируется.

Простой ответ: просто не делайте этого так. Всегда помещайте объект в ту же строку, что и оператор return. Запомните тот факт, что return требуется, чтобы возвращаемые данные находились в одной строке (или, по крайней мере, начинались в той же строке), что и сама инструкция return.

Ближе всего вы можете перейти к вашему сломанному примеру и все еще иметь его работу, показан в вашем первом примере.

return {
    x: 0,
    y: 1
};

В качестве последней мысли вам может потребоваться запустить JS-код с помощью инструмента jsLint, который будет забирать ошибки, подобные этому ( и другие потенциальные проблемы).

Понравилась статья? Поделить с друзьями:
  • Ошибка компилятора cs5001
  • Ошибка компилятора cs1503
  • Ошибка компилятора cs1061
  • Ошибка компилятора cs0426
  • Ошибка компилятора cs0266