如何访问跨域API.AI iframe元素

时间:2017-10-06 07:34:28

标签: javascript

我创建了一个API.AI聊天机器人并使用了#34; web demo"将它集成到我的html文件中。我的意思是API.AI给了我一个嵌入式iframe,如下所示:

<iframe id="ifrm"   width="350" height="430" src="https://console.api.ai/api-client/demo/embedded/...."></iframe>

我在HTML文件中使用它。

现在我想获取上面<input>内的<iframe>标记文字。

<input type="text" name="q" id="query" placeholder="Ask something...">

我尝试了不同的方法来获取此<input>文字。例如:

$('#ifrm').contents().find("#query")

但结果是"undefined"。  有人知道我应该怎么做才能在我的HTML文件中包含此输入标记的文本吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果iframe和您的网页不在同一个域下,则您的网络浏览器不会允许您进入iframe。但是,如果两者属于同一个域,则可以尝试类似以下内容:

var iframe = document.getElementById("your_iframe_id");
var iframe_contents = iframe.contentDocument.body.innerHTML;
var textbox = iframe_contents.getElementById("input_id");

首先,您获取对iframe的引用。 iframe有一个名为contentDocument的属性,它是一个包含所有html数据的document。你可以从那里获取你的输入。

修改

如果iframe和尝试互动的网页不属于同一个域,则浏览器不允许您进行互动。这是出于安全原因。考虑如果我可以在我的网页中嵌入任何网页以使它看起来相同,那么它会有多大的问题,然后只需插入一些代码来监控按键等。

定义从Javascript访问内容的所有规则的规则集称为same-origin policy