问题
I have an ASP page that contains an iframe. I'll call it the main page. I need to set a hidden field's value in the main page once the iframe has finished loading. The iframe is an ASP page that has a hidden field that is set during its page_load. It then needs to pass this value into a hidden field on the main page.
I have an onLoad hander in the iframe page calling a javascript method in the main frame. I had to put a delay in the function where it addresses some telerik controls because it couldn't find them otherwise. Seems that the page hasn't finished initializing.
Questions: Is there a better way to do this? Is there a "page is ready" event? Is there a way to get these pages synched up so I don't need time delays?
Thansks, Brian
In the iframe page I do
window.onload = doLoad;
function doLoad() {
window.parent.SetHitCount(document.getElementById("<%=hdnHitCount.ClientID %>").value);
return;
}
In the main page, I have this javascript function:
// called from document iframe to set the hit count
function SetHitCount(count){
var hdnHitCount = document.getElementById("<%=hdnHitCount.ClientID %>")
hdnHitCount.value = count;
// set in the toolbar. needs a delay so the telerik controls will be ready
window.setTimeout(function() {
var toolbar = $find("<%=RadToolBarDocument.ClientID%>");
if (toolbar != null) {
var button = toolbar.findItemByValue("NumberOfHits");
button.set_text("<%= Resources.Review_Document.Hits %>" + hdnHitCount.value);
}
}, 1000);
}
回答1:
It seems like your problem has nothing to do with the IFrame, since the hdnHitCount
value is being obtained with no problem.
Rather, you have a timing issue - the control is not always available when the value is.
The hardcoded timeout is not a good solution. What if the control initialization takes longer than a second (for example on slower machines/connections)?
The right way to do it is to set up a system where both the control initialization and the SetHitCount
function will both check if the other has already happened:
- If when
SetHintCount
is run, the control is available, run your logic, otherwise, save the hit count to some variable - If when the control is initialized this variable is set, populate the control from its value. Otherwise,
SetHitCount
has not executed yet and will populate the control when it does.
来源:https://stackoverflow.com/questions/2329725/getting-a-hidden-field-from-an-iframe-into-container-page