如果跨域,如何在iframe内的文本字段中获取文本?

时间:2012-12-29 09:50:50

标签: javascript jquery

我有一个表单,我在其中使用了一个文本字段,并在其中调用了iframe,在iframe中有Name的文本字段。我想在使用JavaScript / jQuery进行键控时将Name显示在我的表单文本字段中。我的意思是,我在Name文本字段中输入了一些内容,它将显示在我的输入字段中 See the attached image I want to display name from iframe in <code>Name</code> input field within form

我从另一个域调用iframe。我使用了下面的代码

<script> 
var iframe = document.getElementById('progressive');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var usernameTextBox = innerDoc.getElementById('ApplicantInfo1_FirstName');
usernameTextBox.focus();
</script>

3 个答案:

答案 0 :(得分:1)

在您的父页面中,您是否控制了域名?如果是,请创建子域。假设您的父页面名为example.com,然后创建子域iframe.example.com

在您的父页面中,您只需设置

即可
document.domain = "example.com";

然后将子域视为安全域,并允许您在2页之间进行对话。

这里有更广泛的描述: Ways to circumvent the same-origin policy

答案 1 :(得分:1)

这应该有效:

var windowjQuery = $('#progressive')[0].contentWindow.$;
var f = $('#progressive').contents().find('#ApplicantInfo1_FirstName');

<强>更新

您可以在related question中阅读有关此主题的更多信息。我现在无法设置测试此特定案例的环境。

重点是,您应该调用<iframe> jQuery 对象($),而不是父页面。

答案 2 :(得分:1)

我不确定这是否适用于跨域,但您可能需要查看jQuery .bind()

以下是.bind()

的示例
$('#progressive').load(function() {
  $(this)
    .contents()
    .find('#ApplicantInfo1_FirstName')
    .bind('keydown', function() {
        //  do stuff
    });
});

更多/更好的详细信息here on W3schools和实时演示here。但那些不是跨领域的。还有更多示例here

否则,以下是如何从父级访问子iframe中的javascript的示例:

document.getElementById('ApplicantInfo1_FirstName').contentWindow.yourfunction()