【问题标题】:Retrieving IFrame content using javascript使用 javascript 检索 IFrame 内容
【发布时间】:2012-12-26 09:42:20
【问题描述】:

我已经从这个网站收到了 javascript 代码。

alert(window.frames['sc_frame'].document.getElementsByTagName('body')[0].innerHTML);

alert(window.frames['sc_frame'].document.getElementsByTagName('body')[0].innerText);

问题是我遇到了这个错误。

Unsafe JavaScript attempt to access frame with URL http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx from frame with URL http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Domains, protocols and ports must match.
(anonymous function)
InjectedScript._evaluateOn
InjectedScript._evaluateAndWrap
InjectedScript.evaluate
TypeError: Cannot call method 'getElementsByTagName' of undefined
arguments: Array[2]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "non_object_property_call"
__proto__: Error

我也理解原因,因为我的IFrame 正在调用另一个域。

<iframe id="sc_frame" src="http://example1.com"></iframe>

我使用来自http://example.com 的上述代码。

我的问题是是否有解决方法。使用 javascript 或任何其他方法?

【问题讨论】:

    标签: javascript asp.net iframe


    【解决方案1】:

    由于安全限制,您不能跨域 (/ports/protocols) 直接与正文中的其他元素进行通信。不仅不能访问目标文档源,也不能访问对象和事件。

    可以做的是使用框架通过代理跨域发送消息。 This answer 谈到了这一点。

    【讨论】:

    • 那么,根据那个答案,我们需要在example1.com 中写一些东西来将信息传回example.com?我真的不明白这意味着什么.. 抱歉
    • 我所说的是来自不同域的两个 iframe 之间的通信,而不是服务器到服务器的通信(这当然也是可能的,但不是你所要求的)。我所说的框架让你做的是从 example1.com 中的 iframe 向代理服务器(yourproxy.com)发送一条消息,然后来自 example.com 的 iframe 可以与 yourproxy.com 通信并询问“我有来自 example1.com iframe 的任何消息?”。这样,两个 iframe 可以进行通信,但不能直接在它们之间进行通信。
    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多