ASP.NET использование процессора Google Chrome ReportViewer
мы нашли интересный вопрос между ASP.NET 3.5 и ReportViewer с Google Chrome. Наш набор страниц работает нормально, пока элемент управления ReportViewer не отобразит отчет.
Google Chrome затем съедает 50% процессора, ничего не делая.
я извлек элемент управления ReportViewer в пустой проект веб-форм, чтобы подтвердить его этот элемент управления, а не изгоев бит моего кода.
Я использую ReportViewer в локальном режиме (файл RDLC), поэтому я предполагаю, что его Версия 2005 года?
кто-нибудь видел это раньше и есть решение?
Фил
изменить: Google Chrome 3.0.195.33 на Vista Business x64
Edit 2: Добавлена щедрость за помощь в исправлении этого
7 ответов
решение на самом деле некоторые из ReportViewer JavaScript вызывает бесконечный цикл в Chrome, я публикую исходный код о том, как решить эту проблему, сделав пользовательскую версию элемента управления ReportViewer и исправив сломанный JavaScript (я потерял ссылку на решение, но я не писал это, просто использовал его :))
Я могу подтвердить, что теперь мы обновили до новейшего ReportViewer в Visual Studio 2010, проблема процессора Chrome больше не существует, и это работает не требуется.
public class MyReportViewer : Microsoft.Reporting.WebForms.ReportViewer
{
protected override void Render(HtmlTextWriter writer)
{
using (StringWriter sw = new StringWriter())
{
HtmlTextWriter tmpWriter = new HtmlTextWriter(sw);
base.Render(tmpWriter);
string val = sw.ToString();
val = val.Replace(@"!= 'javascript:\'\''", @"!= 'javascript:\'\'' && false");
writer.Write(val);
}
}
}
на форумах Google Chrome есть тема, говорящая об этом. Я не знаю, возможно ли запустить отчет на сервере, а не локально, что, похоже, устраняет проблему. Вот нить: ReportViewer рендеринга Максов из потока CPU использование
Если вы используете диспетчер отчетов, как я (версия 2005), вы мало что можете сделать с элементом управления ReportViewer. (есть ли?) Существует альтернатива, хотя:
решение Фила эффективно отключает код, запускаемый событием onload iframe. В SSRS 2005 это iframe с идентификатором "ctl140TouchSession0":
<iframe name="ctl140TouchSession0" id="ctl140TouchSession0" onload="if (frames['ctl140TouchSession0'].location != 'javascript:\'\'') frames['ctl140TouchSession0'].location.replace('javascript:\'\'');" src="javascript:''" style="position:absolute;width:0;height:0;border-width:0;visibility:hidden;">
вы можете увидеть оскорбительный код в событии onload - код рендеринга отключает оператор if, добавляя "& & false" в состояние.
следующий javascript выполняет то же самое, опорожняя onload после загрузки страницы, останавливая цикл.
(добавьте это в нижней части папки [MSSQL Reporting services]\ReportManager\js\ReportingServices.в JS)
// CUSTOMIZATIONS
addLoadEvent(customize);
//some browser-independent onload-adder I pulled from somewhere
function addLoadEvent(fn)
{
if (window.addEventListener)
window.addEventListener('load', fn, false);
else if (window.attachEvent)
window.attachEvent('onload', fn);
}
function customize()
{
//the actual fix.
//check first, we may be in a page without a reportviewer
if(document.getElementById('ctl140TouchSession0'))
document.getElementById('ctl140TouchSession0').onload = "";
}
примечание: Я не уверен, что событие onload на самом деле, и если извлекать его, как это убивает некоторые другие функции. Должен быть какой-то способ изменить onload так же, как решение Фила, или браузер зависит от исправления, но это делает трюк, и я еще не сталкивался с проблемами в IE.
если мы изменим тип doc с:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
в:
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
он работает на chrome, но перестает работать с IE.
У меня была эта проблема,и это сводило меня с ума!
прежде всего сохраните сгенерированный файл-это если сможете. Иногда он замерзает. Сохраните и проверьте размер создаваемого отчета. Моя проблема resuletd в файлах, превышающих 16MB, генерируется и замедляет браузер и сеть.
сделайте себе одолжение посмотрите на html, просмотрев источник, который генерируется внутри веб-формы. Проверьте, был ли написан стиль явно встроенный в созданный документ вместо ссылки из файла.
Попробуйте удалить стиль из отчета и посмотреть, если это помогает.
в то время как Chrome-хороший браузер и развивается довольно быстро, я боюсь, что сейчас нет другого решения, кроме использования другого браузера. Я бы подумал, что Google будет работать над этой проблемой в конечном итоге, но пока это не исправлено.
Я думаю, что они попытаются исправить другие проблемы. Я видел, что другие страницы отображаются странным образом с chrome, а не с IE.
это сработало для меня, это не то, что я рекомендовал бы его. Я заметил, что мой WebKitInspector приведет к замораживанию браузера.
var iframes = document.getElementsByTagName("IFRAME");
for (var i = 0, ln = iframes.length; i < ln; i++) {
iframes[0].parentNode.removeChild(iframes[0]);
}