Webnode项目中window被替换为wnd.fe,如何获取URL参数?
解决Webnode中window被替换为wnd.fe的URL参数获取问题
能否阻止替换行为?
Webnode将window替换为wnd.fe是平台服务器端的内置代码改写机制,属于平台限制,普通用户无法直接阻止或修改这一行为。
替代方案
方案1:用self替代window
在浏览器环境中,self是window的别名,Webnode通常不会对该关键字进行替换。修改后的代码如下:
<div id="text"></div> <script> const urlParams = new URLSearchParams(self.location.search); if (urlParams.get('collection') === 'zastery'){ document.getElementById('text').innerHTML = 'Text to show'; }else{ document.getElementById('text').innerHTML = '' } </script>
方案2:使用document.location获取参数
document.location与window.location指向同一个对象,Webnode一般不会改写document相关属性,直接使用即可:
<div id="text"></div> <script> const urlParams = new URLSearchParams(document.location.search); if (urlParams.get('collection') === 'zastery'){ document.getElementById('text').innerHTML = 'Text to show'; }else{ document.getElementById('text').innerHTML = '' } </script>
方案3:手动解析URL参数
如果上述方法失效,可完全不依赖内置对象,手动解析URL参数:
<div id="text"></div> <script> // 手动解析URL参数的函数 function getUrlParam(name) { const url = self.location.href; name = name.replace(/[\[\]]/g, '\\$&'); const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'); const results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } if (getUrlParam('collection') === 'zastery'){ document.getElementById('text').innerHTML = 'Text to show'; }else{ document.getElementById('text').innerHTML = '' } </script>
内容的提问来源于stack exchange,提问作者jvojta
相关产品推荐
相关产品推荐

