Javascript和相同的起源iframe

has*_*0de 8 javascript iframe

是否可以使用页面上但在此框架之外的脚本来读取/编辑iframe内容(不仅仅是像src这样的属性)?我知道如果source来自其他网站是不可能的,因为它会是一个很大的漏洞,但我只是问它是否适用于同一来源的其他内容.

Jam*_*mes 6

是的,如果 iframe 和父页面的位置位于同一主机(同源策略),则可以执行此操作。

为确保浏览器允许您执行此操作,您可以使用

document.domain = "example.com" 
Run Code Online (Sandbox Code Playgroud)

在父页面和 iframe 中。(注意 subdomain.example.com 和 example.com 是不同的)

用于执行此操作的 Dom 方法(iframe 的父页面):

document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside.";
Run Code Online (Sandbox Code Playgroud)

document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();

contentWindow 是答案,适用于大多数(如果不是全部)现代浏览器,当然是 chrome、ie7+ 等。

走另一条路(iframe 到父页面):

top.document.getElementById("DivInTopParent")
Run Code Online (Sandbox Code Playgroud)


kyb*_*kos 5

要添加已经说过的与从同一域加载的iframe进行交互的内容:

只要尝试进行交互的页面和您加载的页面具有相同的document.domain,浏览器就允许您与iframe(或框架)进行交互.

您可以将document.domain设置为从中加载的主机的后缀.例如,如果你有一个从blog.fred.com加载的页面,并且它想要与一些名为jsonservice.fred.com的服务进行交互,那么这两个页面都必须要做

document.domain = 'fred.com';
Run Code Online (Sandbox Code Playgroud)

之前javascript中的一个将能够与另一个进行交互.

浏览器非常聪明,不允许您将document.domain设置为'.com',以防您想知道......


oez*_*ezi 0

如果 iframe-content 来自同一域,您可以使用以下方式访问它frames.myiframe.getElement...