Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

Concatenating string with data element value

sebastiane27965
Level 3
Level 3

Hi guys, i want to load a script with dynamic values based on domain, so i have set up a data element with the different values based on document.locationHostname, it seems to work as expected and the value changes based on site domain.
running into some issues when trying to load the string in the HTML custom code of rule.

 

so this is the string, it will fail at the getVar portion of the string:

<script src='https://sripturl/rc/'+(_satellite.getVar('account_string')+'/scripts/s.js' type='text/javascript'></script>  

 

so what im after is a string that looks like this (given the data element value is 12345):

<script src='https://sripturl/rc/12345/scripts/s.js' type='text/javascript'></script>  

 

i guess theres some single double quotation issues here, or maybe its not possible to do? 
Any pointers appreciated!

1 Accepted Solution
yuhuisg
Correct answer by
Community Advisor
Community Advisor

There are a few problems, e.g. you have an opening "(" but no corresponding closing ")". But the main problem is that you're mixing HTML and JavaScript together.

I suggest using this JavaScript code instead:

var script = document.createElement('script');
script.src = 'http://sripturl/rc/' + _satellite.getVar('account_string') + '/scripts/s.js';
script.type = 'text/javascript'; document.getElementsByTagName('head')[0].appendChild(script);

Reference: https://stackoverflow.com/a/18784960

View solution in original post

3 Replies
yuhuisg
Correct answer by
Community Advisor
Community Advisor

There are a few problems, e.g. you have an opening "(" but no corresponding closing ")". But the main problem is that you're mixing HTML and JavaScript together.

I suggest using this JavaScript code instead:

var script = document.createElement('script');
script.src = 'http://sripturl/rc/' + _satellite.getVar('account_string') + '/scripts/s.js';
script.type = 'text/javascript'; document.getElementsByTagName('head')[0].appendChild(script);

Reference: https://stackoverflow.com/a/18784960

View solution in original post

sebastiane27965
Level 3
Level 3
Hi, great, this works, one thing to note though is that it will not work with Page Bottom or Page Top event , a direct call or DOM ready event works fine
yuhuisg
Community Advisor
Community Advisor
@sebastiane27965 it'll also work with DOM Ready or Window Loaded. The reason it doesn't work with Library Loaded nor page Bottom is that the browser may not have rendered the web page's DOM tree completely, so it cannot get the <head> element properly.