0

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

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

<!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>
4

2 回答 2

0

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

W3Schools 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;
于 2013-10-09T16:39:07.113 回答
0

死循环可能是函数iframedirect()的结果造成的。它改变了iframe的src,一次又一次地触发了onload事件。

您可以使用变量来指出 iframe 是否已由 iframedirect() 加载。

var test = urlParams["entry"];
var test2 = urlParams["test"]; 
var isLoadedByIFrameDirect = false;
function iframedirect() {
   if(!isLoadedByIFrameDirect) {
       if (test=="sldk") {
          document.getElementById("frame1").src = "url1";
          var f1 = frames['frame1'].document.forms['mktForm_1108'];
          f1.elements['FirstName'].value = test;
       }else{
          document.getElementById("frame1").src = "url2";
       }
       isLoadedByIFrameDirect = true;
   }

}

于 2013-10-08T20:55:28.350 回答