我有一个url,例如mysite.com?utm_source=fb当用户触发此url时,需要重定向到主页。我尝试过客户端重定向插件,但没有解决
谢谢。
使用onClientEntry
API(来自Gatsby浏览器)在用户进入站点时触发一个函数。在你的gatsby-browser.js
:
export const onClientEntry = () => checkUtm();
checkUtm()
是您的检查器功能,将其放在您想要的任何地方并将其导入您的gatsby-browser.js
。函数应该是这样的:
export const checkUtm = ()=>{
if (typeof window !== "undefined"){
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const fromFb = urlParams.get('utm_source') === "fb";
if(fromFb) navigate("/");
}
}
typeof window !== "undefined"
条件对于避免代码破坏很重要,因为在编译时,window
(或其他全局对象)可能尚未定义。
其余的代码可以被操纵以满足您的确切需求,我已经添加了盖茨比的navigate
,但根据您的需要进行更改。
如果我有url ex,我还有一个疑问:
的实现方式mysite.com?utm_source=IwAR1AjzvBHLFOp0CeER8X1XdBgGbLDyK9hDh2dVBe15ZXnWjEAae-C0sT67M
像这样,每次string都会改变
这个应该可以工作:
export const checkUtm = ()=>{
if (typeof window !== "undefined"){
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
const hasUtmSource = urlParams.get('utm_source');
if(hasUtmSource) navigate("/");
}
}
const hasUtmSource = urlParams.get('utm_source');
语句将获得utm_source
参数的任何值,因此,如果它存在,它将验证下一个条件,使navigate("/")
.