什么是跨frame訪問元素呢?比如main.html中有如下代碼:
<frameset cols="50%,*"> <frame src="frame1.html"> <frame src="frame2.html"> </frameset>
如果想在frame2.html的頁面操作frame1.html中的元素,那么通過如下的js代碼就可以完成:
parent.frames[0].document
其中parent表示訪問main.html的文檔。frames[0]表示訪問main.html中的第一個frame對象,也就是frame1.html頁面。也可以通過name來指定訪問特定的頁面,例如:
<frameset cols="50%,*"> <frame name="myframe1" src="frame1.html"> <frame name="myframe2" src="frame2.html"> </frameset>
frame2.html中的訪問代碼就可以改為:
parent.frames["myframe1"].document
到這里我們知道了frame之間如何訪問元素,筆者這里只是列舉了一種方法,有興趣的讀者可以自行googling。那么什么是跨域訪問元素呢?
若我們把上面main.html中的一個frame指向其它的域名地址(比如:www.google.com),那么我們還能正常在myframe2中操作myframe1中的元素嗎?
<frameset cols="50%,*"> <frame name="myframe1" src="www.google.com"> <frame name="myframe2" src="frame2.html"> </frameset>
答案是不行!在myframe2中操作myframe1中的元素,會得到如下的錯誤信息:frame Blocked a frame with origin "null" from accessing a cross-origin frame.
瀏覽器是禁止這種行為的。那么有沒有什么方法可以實現這種操作呢?
答案是有的,解決方法有多種,筆者稍后會把鏈接粘貼在后面。這里筆者說一下,筆者可行方法(就是禁用瀏覽器的安全域檢查):
筆者的Chrome是75.0.3770.142,環境是win7。
然后使用如下的命令啟動chrome瀏覽器:
chrome.exe --disable-site-isolation-trials --disable-web-security --user-data-dir="your dir"
讀者可以翻閱下面的鏈接,查看更詳細的說明
1.Disable same origin policy in Chrome
2.blocked a frame of origin “null” from accessing a cross-origin frame - chrome