【JavaScript】frame跨域訪問元素


什么是跨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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM