Expand my Community achievements bar.

SOLVED

Launch Bug: Query Parameter doesn't work with hashtag URL`S

Avatar

Level 1

When we access a url with a hashtag (https://mysite.com/#/?s_cid=test) the value "test" isn't setting on data elements or campaign configuration in adobe launch.

Example:

________________

Do you know why this is happening? Is there any configuration we are supposed to make to get URL parameters in single pages application?

1 Accepted Solution

Avatar

Correct answer by
Level 4

URL Structures have specific orders for this, and is the definition of a query-string and a hash.  For a query-string to truly exist in good URL format, it would need to be before the hash.  Once you hit the "#" symbol in URL structures, that denotes the start of the hash and you've already passed the position to have a query-string value (see below for ordering of URL parts).

From: URL - Wikipedia

URI_syntax_diagram.png

In your example: https://mysite.com/#/?s_cid=test

There is no query-string.

The Hash value is = " #/?s_cid=test "

To use a different example:  https://mysite.com/page.html?s_cid=test#value

Query-string = " ?s_cid=test "

Hash value = " #value "

In angular or react SPA's, it's common to run into this issue of 'expecting query-strings' to have a value when they do not.  Unfortunately, the only way to get at this information is to manually extract that substring yourself from the hash.

I would use a data element with custom code for getting this value if you need it:

1. First get the hash value:   window.location.hash

2. Do a check to see if it contains a question mark

3. Get the substring from the question mark onward

4. Return that value

5. (from 2 if false). If the hash does not have a question mark, return an empty string

Of course, rule #1 is try to use proper URL formatting whenever possible, so if you can put the query-string before the hash - do it.  The browser would then know it's a query-string also.

Hopefully this helps clear it up!

View solution in original post

1 Reply

Avatar

Correct answer by
Level 4

URL Structures have specific orders for this, and is the definition of a query-string and a hash.  For a query-string to truly exist in good URL format, it would need to be before the hash.  Once you hit the "#" symbol in URL structures, that denotes the start of the hash and you've already passed the position to have a query-string value (see below for ordering of URL parts).

From: URL - Wikipedia

URI_syntax_diagram.png

In your example: https://mysite.com/#/?s_cid=test

There is no query-string.

The Hash value is = " #/?s_cid=test "

To use a different example:  https://mysite.com/page.html?s_cid=test#value

Query-string = " ?s_cid=test "

Hash value = " #value "

In angular or react SPA's, it's common to run into this issue of 'expecting query-strings' to have a value when they do not.  Unfortunately, the only way to get at this information is to manually extract that substring yourself from the hash.

I would use a data element with custom code for getting this value if you need it:

1. First get the hash value:   window.location.hash

2. Do a check to see if it contains a question mark

3. Get the substring from the question mark onward

4. Return that value

5. (from 2 if false). If the hash does not have a question mark, return an empty string

Of course, rule #1 is try to use proper URL formatting whenever possible, so if you can put the query-string before the hash - do it.  The browser would then know it's a query-string also.

Hopefully this helps clear it up!