如何动态加载iFrame源代码并使用Javascript自动填充输入表单

如何动态加载iFrame源代码并使用Javascript自动填充输入表单,javascript,iframe,dynamic,onload,autofill,Javascript,Iframe,Dynamic,Onload,Autofill,我需要检索URL参数(我可以成功地做到这一点),并根据一个参数确定要填充哪个iframe src,然后使用其他参数自动填充通过表单src创建的表单。第一个问题是我无法阻止页面进入无限循环。它正确加载并显示正确的iframe,但是无限循环(load)需要停止。其次,我无法获取其他参数来自动填充输入值 这是代码。我希望你能帮忙。这是密码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

我需要检索URL参数(我可以成功地做到这一点),并根据一个参数确定要填充哪个iframe src,然后使用其他参数自动填充通过表单src创建的表单。第一个问题是我无法阻止页面进入无限循环。它正确加载并显示正确的iframe,但是无限循环(load)需要停止。其次,我无法获取其他参数来自动填充输入值

这是代码。我希望你能帮忙。这是密码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/2000/REC-    xhtml1-200000126/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<!-- Keep your jQuery up to date -->

<script  type="text/javascript">
var urlParams;
(window.onpopstate = function () {
var match,
    pl     = /\+/g,  // Regex for replacing addition symbol with a space
    search = /([^&=]+)=?([^&]*)/g,
    decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
    query  = window.location.search.substring(1);

urlParams = {};
while (match = search.exec(query))
   urlParams[decode(match[1])] = decode(match[2]);
})();


var test = urlParams["entry"];
var test2 = urlParams["test"];

function iframedirect(){
if (test=="sldk") {
    document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html";
    var f1 = frames['frame1'].document.forms['mktForm_1108'];
    f1.elements['FirstName'].value = test;
}else{
document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html";
}
}

</script>
</head>
<body id="bodyId" class="mktEditable" align="center" >
<iframe id="frame1" src="" onload="iframedirect()" height="750px" width="620px"  scrolling="no"    frameborder="0" marginwidth="0"></iframe>
</body>
</html>

var-urlParams;
(window.onpopstate=函数(){
变量匹配,
pl=/\+/g,//用空格替换加法符号的正则表达式
搜索=/([^&=]+)=?([^&]*)/g,
decode=函数{返回decodeURIComponent(s.replace(pl)(“”);},
query=window.location.search.substring(1);
urlParams={};
while(match=search.exec(查询))
urlParams[decode(匹配[1])]=decode(匹配[2]);
})();
var test=urlParams[“条目”];
var test2=urlParams[“test”];
函数iframedirect(){
如果(测试==“sldk”){
document.getElementById(“frame1”).src=”http://na-sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html";
var f1=frames['frame1'].document.forms['mktForm_1108'];
f1.元素['FirstName']。值=测试;
}否则{
document.getElementById(“frame1”).src=”http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html";
}
}

无限循环可能是由函数iframedirect()的结果引起的。它会更改iframe的src并一次又一次地触发事件

您可以使用一个变量指出iframedirect()是否已加载iframe


}

好的,问题是我创建了一个sel-freeference-onload事件。坏主意。为了解决这个问题,我需要从iframe元素中删除onload。我以前试过在没有运气的情况下把它放进身体里。但我可能把事情搞砸了,所以如果你有类似的情况,不要忽视这个选项。我决定在函数完成后立即使用Javascript来完成。如果您是新手,可以在这里找到Javascript onload和HTML onload之间的区别

我仍然没有解决这个问题的“从url参数自动填充iframe表单”部分。一旦我弄明白了,我会对这个答案再作评论

无论如何,这是代码

function iframedirect() {
   if(!isLoadedByIFrameDirect) {
       if (test=="sldk") {
          document.getElementById("frame1").src = "http://na-   sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html";
          var f1 = frames['frame1'].document.forms['mktForm_1108'];
          f1.elements['FirstName'].value = test;
       }else{
          document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html";
       }
       isLoadedByIFrameDirect = true;
   }
}
window.onload = iframedirect;

实现这一点并没有停止无限循环。谢谢你的主意。你是对的,你意识到我有一个自我参照加载。我需要消除它,而不是试图阻止它。感谢您将您的建议放在易于复制和粘贴的代码中。很少有人这么做。新手从中受益匪浅。我确实解决了这个问题,我现在就发布它。
function iframedirect() {
   if(!isLoadedByIFrameDirect) {
       if (test=="sldk") {
          document.getElementById("frame1").src = "http://na-   sj09.marketo.com/lp/cochlearsandbox/UpgradeInterest_IFrameLandingPage.html";
          var f1 = frames['frame1'].document.forms['mktForm_1108'];
          f1.elements['FirstName'].value = test;
       }else{
          document.getElementById("frame1").src = "http://na-sj09.marketo.com/lp/cochlearsandbox/CAM-UpgradeInterestForm_iFrameLandingPage2ndOption.html";
       }
       isLoadedByIFrameDirect = true;
   }
}
window.onload = iframedirect;