JS控制静态页面之间传递参数获取参数并应用
在项目中遇到这也一个问题:
有a.html和b.html。
1.a页面已经打开,b页面尚未打开,我希望在a页面设置好一些列参数,比如背景色,宽度等参数,传递给b页面,好让b页面在打开就能应用。
2.a页面已经打开,b页面无论是否打开。在a页面需要获取到b页面的一些元素甚至变量,以便于应用到a页面。
注意:不涉及跨域问题。
想了很久,终于想到了解决方案。
第一个问题,我们可以利用html页面锚点的特性,将参数通过url传递给b页面
这是a页面代码:
0 | <button>跳转设置</button> |
1 | <script> |
2 | var btn = document.querySelector('button'); |
3 | console.log(window); |
4 | |
5 | btn.addEventListener('click', function(){ |
6 | window.location = 'ci.html#bgc=#369?wd=500' |
7 | }) |
8 | </script> |
由代码可以知道,点击按钮跳转页面,跳转的url后面多了一系列参数,这个并不会影响跳转的地址,当b页面打开后,可以获取location截取字符串获得变量及变量值,再进行应用。
这是b页面代码:
0 | <div></div> |
1 | <script> |
2 | var div = document.querySelector('div'); |
3 | var bl = window.location.hash.slice(1).split('?'); |
4 | if(bl.length >= 1){ |
5 | for(var i = 0; i < bl.length; i += 1){ |
6 | switch (bl[i].split('=')[0]) { |
7 | case 'bgc': |
8 | document.body.style.background = bl[i].split('=')[1]; |
9 | break; |
10 | case 'wd': |
11 | div.style.width = bl[i].split('=')[1] + 'px'; |
12 | break; |
13 | default: |
14 | null; |
15 | break; |
16 | } |
17 | } |
18 | } |
19 | </script> |
通过截取字符串取得url传递过来的变量应用。成功!
第二个问题,我想的是通过iframe来达到目的,这只是一个障眼法。
在a页面动态创建一个iframe,并设置src值为b页面,display为none。再通过iframe的contentDocument属性获取返回的iframe的文档。
在文档内获取到所需要的元素并应用。
源码:
0 | <span>11111111111</span> |
1 | <script> |
2 | var fram = document.createElement('iframe'); |
3 | fram.src = 'http://www.vip.com/kongzhi/fram2.html'; |
4 | fram.style.display = 'none'; |
5 | document.body.appendChild(fram); |
6 | fram.onload = function(){ |
7 | var doc = fram.contentDocument || fram.contentWindow.document; |
8 | var p = doc.querySelector('p'); |
9 | document.body.appendChild(p); |
10 | } |
11 | </script> |
很轻松搞定,希望对各位看官有所帮助,欢迎你来和我探讨交流学习。