我正在将报表嵌入到iframe中(使用.NET ReportingServices获取报表)
我想在加载报告后启动javascript函数。
我试过
window.addEventListener("load", ...)
但是,当报告结果加载了javascript时,会在报告有效加载之前触发window.load。
是否有一些javascript函数可以让我处理报告加载?像
the_report.loaded(function () {
alert(document.height);
});
顺便说一下,目标是获得最终渲染文档的高度。
答案 0 :(得分:3)
这正是我最终的结果(iframe方面)
/* This will run only when all ReportingService JS is loaded */
Sys.Application.add_load(function () {
/* Let's consider the report is already loaded */
loaded = true;
/* The function to call when the report is loaded */
var onLoad = function () {
alert(document.body.scrollHeight);
/* Set the report loaded */
loaded = true;
};
/* The report instance */
var viewerReference = $find("ReportViewer1");
/* The function that will be looped over to check if the report is loaded */
check_load = function () {
var loading = viewerReference.get_isLoading();
if (loading) {
/* It's loading so we set the flag to false */
loaded = false;
} else {
if (!loaded) {
/* Trigger the function if it is not considere loaded yet */
onLoad();
}
}
/* Recall ourselves every 100 miliseconds */
setTimeout(check_load, 100);
}
/* Run the looping function the first time */
check_load();
})
答案 1 :(得分:2)
Javascript支持充其量是最小的。可悲的是,这些控制措施仍然落后于大多数方面的时代。您可以在此处找到所揭示和记录的内容:
http://msdn.microsoft.com/en-us/library/dd756405(VS.100).aspx
幸运的是,您可以调用get_isLoading()函数:
http://msdn.microsoft.com/en-us/library/dd756413(v=vs.100).aspx
尝试这样的事情:
(function() {
var onLoad = function() {
// Do something...
};
var viewerReference = $find("ReportViewer1");
setTimeout(function() {
var loading = viewerReference.get_isLoading();
if (!loading) onLoad();
},100);
})();
答案 2 :(得分:1)
基于皮埃尔的解决方案,我最终得到了这个。 (简化为只在它加载一次之前调用它,因为它似乎在每次加载后运行)
注意:我的报告配置是SizeToReportContent =" true" AsyncRendering =" false",这可能是我可以简化它的原因之一。
Sys.Application.add_load(function () {
var viewerReference = $find("ReportViewer1");
check_load = function () {
if (viewerReference.get_isLoading()) {
setTimeout(check_load, 100);
} else {
window.parent.ReportFrameLoaded();
}
}
check_load();
});