Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从同一域的iframe中的元素获取值_Javascript_Html_Iframe - Fatal编程技术网

Javascript 从同一域的iframe中的元素获取值

Javascript 从同一域的iframe中的元素获取值,javascript,html,iframe,Javascript,Html,Iframe,我试图通过使用iframe将我需要的两个页面放在一个页面上,将两个进程压缩为一个进程 我有一个包含文本区域(用于发送电子邮件)的页面,然后我有一个包含某人购买详细信息的购买参考页面 我试图在我的电子邮件页面底部添加一个购买页面的iframe,然后抓取其中的一些数据并将其插入文本区域 编辑:这是我目前掌握的: 脚本一 //Grabs the selected purchase number var purchaseNumber = window.getSelection(); purchaseNu

我试图通过使用iframe将我需要的两个页面放在一个页面上,将两个进程压缩为一个进程

我有一个包含文本区域(用于发送电子邮件)的页面,然后我有一个包含某人购买详细信息的购买参考页面

我试图在我的电子邮件页面底部添加一个购买页面的iframe,然后抓取其中的一些数据并将其插入文本区域

编辑:这是我目前掌握的:

脚本一

//Grabs the selected purchase number
var purchaseNumber = window.getSelection();
purchaseNumber = purchaseNumber.toString();

var purchaseTitle;
var purchaseNumber;

function frameLoaded() {
           purchaseTitle = window.frames['purchaseIframe'].contentDocument.getElementById ('listingTitle');
           purchaseNumber = window.frames['purchaseIframe'].contentDocument.getElementById ('auctionSoldIdDisplay');
           purchaseTitle = purchaseTitle.innerHTML;
           purchaseNumber = purchaseNumber.innerHTML

var purchaseDetails = purchaseTitle + " - " + purchaseNumber;

insertText = insertText.replace("PURCHASEDETAILS", purchaseDetails);
         }  

if(purchaseNumber.length > 0){

var purchaseIframe = document.createElement('iframe');
purchaseIframe.src = 'http://www.mysite.co.nz/Admin/Listing/PurchaseDisplay.aspx?asid=' + purchaseNumber + '&submit1=++GO++';
purchaseIframe.setAttribute("height","1000");
purchaseIframe.setAttribute("width","100%");
purchaseIframe.setAttribute("id","purchaseIframe");
purchaseIframe.setAttribute("onload", "frameLoaded();");
void(document.body.appendChild(purchaseIframe));
alert(purchaseNumber); 
}
脚本二

//Gather the selected template
var selectedTxt = document.getElementById('txtEmailText').value;

//Change the selected txt to a string
var insertText = selectedTxt.toString();

var purchaseTitle = window.frames['purchaseIframe'].contentDocument.getElementById ('listingTitle');
var purchaseNumber = window.frames['purchaseIframe'].contentDocument.getElementById ('auctionSoldIdDisplay');

purchaseTitle = purchaseTitle.innerHTML;
purchaseNumber = purchaseNumber.innerHTML

var purchaseDetails = purchaseTitle + " - " + purchaseNumber;

insertText = insertText.replace("PURCHASEDETAILS", purchaseDetails);


//Pasting the variable in to the textarea
document.getElementById('txtEmailText').value = insertText;
实际上,我在页面上突出显示采购参考号,然后执行此脚本以使用突出显示的编号打开采购页面。然后,我抓取所需元素的文本值,并将它们粘贴到文本区域

我对javascript还是相当陌生的,我一直在自学

如果我一个接一个地运行上面的脚本,那么它就像一个符咒,但是如果我尝试将onload()函数中的第二个脚本设置为iframe,那么它就不会运行


任何帮助都将不胜感激,或者如果您能为我指出文章的帮助方向。

我的第一个想法是,在您尝试从iframe获取值之前,iframe没有完全加载。我的想法是尝试在iframe中添加一个onload事件,然后在加载时调用一个获取该值的函数

我会添加
purchaseIframe.setAttribute(“onload”,“frameLoaded();”)添加到purchaseIframe块,然后将frameLoaded()函数添加到脚本中。比如:

      function frameLoaded() {
            var purchaseTitle = window.frames[0].document.getElementById("listingTitle" );
            var purchaseNumber = window.frames[0].document.getElementById("auctionSoldIdDisplay");
            console.log(purchaseTitle.innerHTML);
            console.log(purchaseNumber.innnerHTML);
         }  
看看这样的东西是否符合正确的价值观。如果可以,你可以在需要的地方插入


我是否正确理解您的问题?

我在您的代码中添加了内容,但仍然遇到一个错误:未捕获引用错误:未定义purchaseTitle VM773:8未捕获类型错误:无法读取Null的属性“innerHTML”,但您的想法是对的,我想加载iframe,然后将值抓取到全局变量中,稍后我将使用这些全局变量。如果您像这样重新排列它,可能会给您一个值:
函数frameLoaded(){var theFrame=window.frames[0];var purchaseTitle=theFrame.document.getElementById(“listingTitle”);var purchaseNumber=theFrame.document.getElementById(“AuctionSoldDisplay”);console.log(purchaseTitle.innerHTML);console.log(purchaseNumber.innerHTML);}
在我的所有测试中,这对我来说都是有效的,用于获取iframe中元素的innerHTML。对不起,伙计,我刚刚仔细研究了一下代码,因为它本应该是有效的,而你给我的代码的一个修改版本现在正在起作用!我很快就会发布我的解决方案