Насколько совместим MS Project Viewer с браузерами, такими как Firefox и Safari?
Также сообщайте, если вы знакомы со сторонними докладчиками отчетов для SSRS.
Насколько совместим MS Project Viewer с браузерами, такими как Firefox и Safari?
Также сообщайте, если вы знакомы со сторонними докладчиками отчетов для SSRS.
Изменить - 2016/2017 Обновление
SSRS 2016+ можно сказать, что он совместим с несколькими браузерами.
Границы таблиц не отображаются прямо в IE10, но IE10 все равно вымирает.
В остальных браузерах это прекрасно.
Вам все равно нужно зарегистрировать add_pageLoaded
, чтобы перевести подсказки параметров.
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () { fixReportingServices('rpt-container'); });
Кроме того, как в версиях < 2016, вам нужно добавить элемент управления PageCountMode="Actual"
в RS:ReportViewerHost
.
<RS:ReportViewerHost ID="ReportViewerControl" PageCountMode="Actual" runat="server" />
если вы хотите иметь значимые номера подкачки.
Также возникает проблема, когда вы устанавливаете язык в строке запроса с помощью datepickers (с SSRS < 2016). Вам нужно установить context.Request.UserLanguages[i]
на язык, указанный в строке запроса в контексте .BeginRequest в HTTP-модуле, если вы хотите, чтобы datepicker работал с не-браузерным языком.
Кроме того, вам нужно добавить HTTP-заголовки X-Frame-Options и Content-Security-Policy в каждом HTTP-ответе, если вы хотите безопасно использовать SSRS в iframe в Интернете. Подробнее см. мой github-репозиторий.
</EndEdit>
Pre-2016:
Я могу вам сказать, у меня 9-летний опыт работы с этой чертовой штукой (SSRS 2005, SSRS 2008 R1 и R2, 2012 и SSRS 2014).
Позвольте мне заверить вас, что, поскольку отчеты SSRS HTML зависят от IE5-Quirksmode, нет никаких шансов, что они когда-либо будут корректно отображаться в любом браузере, отличном от Internet Explorer (IE < 10 Я мог бы склоняться к добавлению).
ЕСЛИ у вас есть доступ администратора к серверу отчетов, и я подчеркиваю IF, вы можете добавить подпрограммы jQuery и CSS на странице ReportViewer, чтобы исправить самые основные проблемы (например, вы не видите более 1 см отчета), но в противном случае рендеринг HTML по-прежнему будет выглядеть абсолютно ужасно (поля, границы таблицы, прокрутки изображения, размер столбца, размер текстового поля, название и/или выравнивание pagenumber и т.д., короче - почти что-либо)
Конечно, элемент управления ActiveX может работать только в InternetExplorer (в Windows), потому что поддерживается только ActiveX.
Позвольте мне также заверить вас, что в аду нет абсолютно никакого способа заставить ReportManager работать в любом другом браузере, чем IE.
Что касается поддержки Internet Explorer, следует упомянуть, что начиная с IE версии 10 IE по умолчанию использует webkit-quirksmode (по соображениям совместимости) вместо IE5 quirksmode, поэтому HTML-рендеринг будет выглядеть одинаково ужасно, как в Chrome/Firefox/Safari для IE 10+, если вы не добавили мета-xua-совместимый IE5 на странице ReportViewer.aspx.
Последний может не применяться к Intranet, так как IE автоматически возвращается в режим совместимости IE 7, когда он находится на узле интрасети (но только в любой версии Windows < 8).
В Windows 8 ссылки localhost и ссылки на имя пользователя (не могут добавлять сообщения http://в сообщениях stackoverflow) не назначаются локальной зоне интрасети (возможно, это быстрый хак, поэтому IE не возвращается в режим совместимости IE7), и поэтому проверка подлинности Windows будет FAIL.
Следует также отметить, что невозможно добавить мета-совместимый IE5 для ReportManager, потому что нет страницы, которую вы можете редактировать (скомпилированный не обновляемый веб-проект ASP.NET...).
И если не использовать dev-tools для переключения Reportmanager в quirksmode, невозможно использовать ReportManager в IE 10 +.
Затем следует упомянуть еще одно: начиная с IE9 IE наследует doctype элементов iframe с родительской страницы, и нет никакого способа в аду изменить это (без изменения родительской страницы на желаемый дочерний -страничный doc-режим).
Итак, если вы были достаточно умны, чтобы использовать iframes для отчетов, потому что нет никакого способа в аду любой здравомыслящий человек хочет всплывающих окон в возрасте всплывающих блокировщиков, страница отчета наследует родительскую страницу doctype. Если это не IE5-QuirksMode, он сделает отчеты одинаково ужасными, как в Safari/Chrome/Firefox/Opera для любого IE > 8, независимо от любого возможного мета-xua-совместимого тега ie5 в ReportViewer.aspx.
Что касается альтернатив, то для бесплатного и с аналогичным набором функций существует только Eclipse BIRT (к счастью, HTML-рендеринг не похож)
Следует отметить, что BIRT, хотя и лицензируется в рамках публичной лицензии Eclipse, использует SUN Java, и поэтому вы используете технологию Oracle, которая подчиняется соответствующим условиям лицензирования.
Кроме того, вы используете технологию, отличную от Microsoft, а визуализаторы Excel-Sheets BIRT на самом деле представляют собой XML файлы, которые будут выдавать (кто бы предположил) довольно тревожное предупреждение при открытии в Office 2010 +.
Затем для довольно большой платы есть http://www.stimulsoft.com отчеты, и Telerik сообщает.
Из технических взглядов я бы рекомендовал отчеты stimulsoft, но: отказ от ответственности, я не использовал ни одного из них, потому что они не являются бесплатными.
Что касается альтернативных движков рендеринга SSRS (но не для зрителей), существует только www.fyireporting.com/, у которого есть вилка здесь http://www.codeproject.com/Articles/138271/An-Open-Source-RDL-Engine.
Но fyiReporting является неполным и работает в процессе (если не оставлен), поэтому я бы воздержался от его использования.
Итог, если ваш продукт - только IE и окна, с версией Windows < 8 (и no - not <= на всякий случай, если вы не обращали внимания), в интрасети, вызванной из всплывающих окон, а не iframe, затем перейдите к SSRS.
Для чего-либо еще используйте отчеты stimulsoft (проблема в том, что вы должны переделать все свои отчеты, так как автоматическая миграция отсутствует, даже не работающая).
PS:
И добавив "немного javascript", я имею в виду следующую вещь (2008 R1 Edition, не будет работать в 2008R2 +, может работать в 2005 году, и обратите внимание, что вам нужно встроить jQuery и jQuery Migrate в тег inline- script, если клиентский компьютер не имеет доступа к http (s)://ajax.aspnetcdn.com [примечание: размещение скриптов в папке Pages и добавление относительной или абсолютной ссылки не будет работать...]):
<%@ Register TagPrefix="RS" Namespace="Microsoft.ReportingServices.WebServer" Assembly="ReportingServicesWebServer" %>
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Microsoft.ReportingServices.WebServer.ReportViewerPage" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<%= System.Web.HttpContext.Current.Request.Browser.Browser == "IE" && System.Globalization.CultureInfo.InvariantCulture.CompareInfo.IndexOf(System.Convert.ToString(System.Web.HttpContext.Current.Request.QueryString), "stylesheet", System.Globalization.CompareOptions.IgnoreCase) == -1 ? (System.Web.HttpContext.Current.Request.Browser.Browser != "IE" ? "": "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=5\">") : "<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">" %>
<head id="headID" runat="server">
<title>Report Viewer</title>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.migrate/jquery-migrate-1.1.0.min.js"></script>
<script type="text/javascript">
var bInFrameOrIframe = false;
var iLanguageIndex = 0;
var language = "DE_LOL";
var UpdateLock = false;
if (window.self === window.top) {
// alert("true");
// not in a frame
// Use IE5 quirksmode
//document.writeln('<meta http-equiv="X-UA-Compatible" content="IE=5" />');
bInFrameOrIframe = false
}
else {
// in a frame, FMS
bInFrameOrIframe = true;
}
function TranslateParameterPrompts() {
//mTo = false;
$("table[id^='ParametersGridReportViewerControl'] span").each(function(index) {
var strText = $(this).text();
if (strText != null && strText.indexOf('/') != -1) {
strText = strText.split('/');
if (iLanguageIndex < strText.length)
strText = strText[iLanguageIndex];
else {
if (strText.length > 0)
strText = strText[0];
}
$(this).text(strText);
}
});
//setTimeout(function(){mTo = true}, 5000);
}
function setTableSize() {
//$("[id$='ReportViewerControl']")
$(
$(
$("#ReportFrameReportViewerControl")[0].contentWindow.document
)
.find("[id$='report']")[0].contentWindow.document.body
).find('*')
.each(function() {
//console.log("Processing an element");
//var cls = $(this).attr("class");
try {
// Don't add a border to sort-arrow
if ($(this).is('img')) {
return;
}
var anywidth = $(this).css('width');
var anywidth = parseFloat(anywidth);
//console.log("anywidth: " + anywidth);
//var lol = $(this).css('borderLeftWidth');
var blw = $(this).css('border-left-width');
var brw = $(this).css('border-right-width');
var btw = $(this).css('border-top-width');
var bbw = $(this).css('border-bottom-width');
var borls = $(this).css('border-left-style') == "solid";
var borrs = $(this).css('border-right-style') == "solid";
var borts = $(this).css('border-top-style') == "solid";
var borbs = $(this).css('border-bottom-style') == "solid";
var blw = parseFloat(blw);
var brw = parseFloat(brw);
var btw = parseFloat(btw);
var bbw = parseFloat(bbw);
//parseInt($(this).css("borderRightWidth"))
//console.log(parseInt($(this).css("borderLeftWidth")));
UpdateLock = true;
// Set width to 1px where 0px
if (anywidth == 0)
$(this).css('width', '1px');
if (borls && blw == 0.0 || (blw > 0.0 && blw < 1.0)) {
//console.log("setting border width");
$(this).css('border-left-width', '1px');
}
if (borrs && brw == 0.0 || (brw > 0.0 && brw < 1.0)) {
$(this).css('border-right-width', '1px');
}
if (borts && btw == 0.0 || (btw > 0.0 && btw < 1.0)) {
$(this).css('border-top-width', '1px');
}
if (borbs && bbw == 0.0 || (bbw > 0.0 && bbw < 1.0)) {
$(this).css('border-bottom-width', '1px');
}
UpdateLock = false;
}
catch (ex) {
UpdateLock = false;
//console.log(ex);
}
}); // End $('*').each
// console.log("loop");
var $img = $("img[onload^='this.fitproportional=true']");
if ($img == null) {
// console.log("img is null");
return;
}
var $div = $img.parent();
if ($div == null) {
// console.log("div is null");
return;
}
UpdateLock = true;
{
$img.removeAttr("height");
$img.css('max-width', '100%')
$img.css('max-height', '100%')
$div.css('text-align', 'right');
var divMinWidth = parseFloat($div.css('min-width'));
var divWidth = parseFloat($div.css('width'));
var divMinHeight = parseFloat($div.css('min-height'));
var divHeight = parseFloat($div.css('height'));
// console.log("width: " + divWidth);
// console.log("height: " + divHeight);
// console.log("min-width: " + divMinWidth);
// console.log("min-height: " + divMinHeight);
if (divMinWidth != 0)
$div.css('width', $div.css('min-width'));
if (divMinHeight != 0)
$div.css('height', $div.css('min-height'));
}
UpdateLock = false;
}
$(document).ready(function() {
switch (language) {
case "fr":
iLanguageIndex = 1;
break;
case "it":
iLanguageIndex = 2;
break;
case "en":
iLanguageIndex = 3;
break;
default: // "DE"
iLanguageIndex = 0;
}
TranslateParameterPrompts();
// setInterval(function() { TranslateParameterPrompts() }, 100);
if ($.browser.msie && !bInFrameOrIframe)
return;
// if ($.browser.webkit)
//setTableSize();
$("[id$='ReportFrameReportViewerControl']").load(function() {
//setNewHeight();
//alert("Loading");
setTableSize();
$(
$("[id$='ReportFrameReportViewerControl']")[0].contentWindow.document
)
.find("[id$='report']").load(function() {
//alert("load report");
setTableSize();
}
); // End load #report
}); // End Function load #ReportFrameReportViewerControl
}); // End Function document.ready
</script>
</head>
<body style="margin: 0px; overflow: auto">
<form style="width:100%;height:100%" runat="server" ID="ReportViewerForm">
<RS:ReportViewerHost ID="ReportViewerControl" runat="server" />
</form>
</body>
</html>
Примечание: UpdateLock проистекает из backport 2012 года и на самом деле не используется здесь, а язык также вытекает из backport, setInterval на TranslateParameterPrompts необходим в 2012 году и функция на 2012 год есть только небольшое дополнение "метки" в селекторе jQuery...
function TranslateParameterPrompts() {
//mTo = false;
$("table[id^='ParametersGridReportViewerControl'] label span").each(function(index) {
var strText = $(this).text();
if (strText != null && strText.indexOf('/') != -1) {
strText = strText.split('/');
if (iLanguageIndex < strText.length)
strText = strText[iLanguageIndex];
else
{
if(strText.length > 0)
strText = strText[0];
}
$(this).text(strText);
}
});
//setTimeout(function(){mTo = true}, 5000);
}
Вывод языка из языка браузера происходит следующим образом: btw:
<script type="text/javascript">
language = <%= System.Web.HttpContext.Current.Request.UserLanguages != null ? "\"" + System.Convert.ToString(System.Web.HttpContext.Current.Request.UserLanguages[0]) + "\"" : "null" %>;
if(language == null)
language = window.navigator.userLanguage || window.navigator.language;
if(language != null)
language = language.substr(0,2).toLowerCase();
</script>
И в 2012 году вам нужно удалить файлы cookie сеанса, иначе вы получите "HTTP 400: слишком длинный заголовок" после открытия около 120 отчетов:
<script type="text/C#" runat="server">
protected string ClearSessionKeepAliveCookiesToPreventHttp400HeaderTooLong()
{
if(Request == null || Request.Cookies == null)
return "";
if(Request.Cookies.Count < 60)
return "";
// System.Web.HttpContext.Current.Response.Write("<h1>"+Request.Cookies.Count.ToString()+"</h1>");
for(int i = 0; i < System.Web.HttpContext.Current.Request.Cookies.Count; ++i)
{
if(StringComparer.OrdinalIgnoreCase.Equals(Request.Cookies[i].Name, System.Web.Security.FormsAuthentication.FormsCookieName))
continue;
if(!Request.Cookies[i].Name.EndsWith("_SKA", System.StringComparison.OrdinalIgnoreCase))
continue;
if(i > 60)
break;
//System.Web.HttpContext.Current.Response.Write("<h1>"+Request.Cookies[i].Name+"</h1>");
System.Web.HttpCookie c = new System.Web.HttpCookie( Request.Cookies[i].Name );
//c.Expires = System.DateTime.Now.AddDays( -1 );
c.Expires = new System.DateTime(1970, 1 ,1);
c.Path = Request.ApplicationPath + "/Pages";
c.Secure = false;
c.HttpOnly = true;
// http://stackoverflow.com/questions/5517273/httpcookiecollection-add-vs-httpcookiecollection-set-does-the-request-cookies
//Response.Cookies[Request.Cookies[i].Name] = c;
//Response.Cookies.Add(c);
Response.Cookies.Set(c);
}
return "";
}
</script>
И в 2012 году вам необходимо прослушать обновление контента, поскольку оно использует элементы управления Microsoft Ajax
function cbOnContentUpdate() {
//console.log("content update");
alterTableBorderWidth();
// TranslateParameterPrompts();
} // End Callback cbOnContentUpdate
var hLastTimeout = null;
function queueUpdate() {
if (UpdateLock)
return;
if (hLastTimeout != null)
clearTimeout(hLastTimeout);
hLastTimeout = window.setTimeout(function() { cbOnContentUpdate(); }, 50);
//window.setTimeout(function() { cbOnContentUpdate(); }, 3000);
} // End Function queueUpdate
$(document).ready(function() {
switch (language) {
case "fr":
iLanguageIndex = 1;
break;
case "it":
iLanguageIndex = 2;
break;
case "en":
iLanguageIndex = 3;
break;
default: // "DE"
iLanguageIndex = 0;
}
setInterval(function() { TranslateParameterPrompts() }, 100);
// opt-out for non-framed IE, because that crook supports IE5-Quirks (framed takes parent-doctype in IE >= 9)
if ($.browser.msie && !areWeInFrame())
return;
// if ($.browser.webkit)
// console.log('Setting event listener!');
// http://stackoverflow.com/questions/4979738/fire-jquery-event-on-div-change
//$("[id$='ReportViewerControl']").bind('DOMNodeInserted DOMNodeRemoved', function(event) {
//$("[id$='ReportArea']")
$("body")
.bind('DOMNodeInserted DOMNodeRemoved DOMSubtreeModified', function(event) {
if (event.type == 'DOMNodeInserted') {
//console.log('Content added! Current content:' + '\n\n' + this.innerHTML);
//console.log('Content added!');
queueUpdate();
}
else {
//console.log('Content removed! Current content:' + '\n\n' + this.innerHTML);
//console.log('Content removed!');
queueUpdate();
}
}); // End Bind IRM
}); // End Function $(document).ready
И обратите внимание, что в 2012 году setTableSize имеет значение alterTableBorderWidth, а селектор будет выглядеть следующим образом:
function alterTableBorderWidth()
{
//$('*')
$("[id$='ReportViewerControl']").find('*')
.each(function() {
Btw, если вы хотите удалить пиктограмму PRINT, потому что это только источник печали, это происходит так (для немецкого, английского, французского и итальянского языков, на которых говорят в Швейцарии + английский).
Этот CSS для 2008 R1, не знаю и не заботится, если он будет таким же в 2012 году.
input[type="image"][title="Drucken"], input[type="image"][title="Print"], input[type="image"][title="Imprimer"], input[type="image"][title="Stampa"]
{
display: none !important;
}
И если это еще не сдерживает вас, тогда идите прямо вперед и используйте проверку подлинности в SSRS 2012 (подсказка 1: нет образца с ms-provied, как для 2005-2008R2, вам нужно написать его самостоятельно);)
Hint2: если вы следовали за hint1, переадресация проверки подлинности форм не работает, если у вас есть двоеточие в URL [ошибка?], вы можете украсть код из моно и написать свою собственную переадресацию.
Hint3: если вы следовали за hint2 и получили работу с проверкой подлинности форм, то вы, вероятно, захотите изменить инструмент загрузки, который собираетесь писать, потому что вам не понравится делать вручную "для каждого каталога просмотра отчетов". override checkbox - upload report - set datasource) для 120 отчетов или около того, то вы наследуете класс от ReportingService2005 и переопределяете GetWebRequest и GetWebResponse
''' <summary>
''' Overriding the method defined in the base class.
''' </summary>
''' <param name="uri"></param>
''' <returns></returns>
Protected Overrides Function GetWebRequest(uri As Uri) As System.Net.WebRequest
Dim request As System.Net.HttpWebRequest
request = DirectCast(System.Net.HttpWebRequest.Create(uri), System.Net.HttpWebRequest)
request.Credentials = MyBase.Credentials
request.CookieContainer = New System.Net.CookieContainer()
If m_authCookie IsNot Nothing Then
request.CookieContainer.Add(m_authCookie)
End If
Return request
End Function ' GetWebRequest
''' <summary>
''' Overriding the method defined in the base class.
''' </summary>
''' <param name="request"></param>
''' <returns></returns>
Protected Overrides Function GetWebResponse(request As System.Net.WebRequest) As System.Net.WebResponse
Dim response As System.Net.WebResponse = MyBase.GetWebResponse(request)
' http://social.msdn.microsoft.com/Forums/sqlserver/en-US/f68c3f2f-c498-4566-8ba4-ffd5070b8f7f/problem-with-ssrs-forms-authentication
Dim cookieName As String = response.Headers("RSAuthenticationHeader")
If cookieName IsNot Nothing Then
m_authCookieName = cookieName
Dim webResponse As System.Net.HttpWebResponse = DirectCast(response, System.Net.HttpWebResponse)
Dim authCookie As System.Net.Cookie = webResponse.Cookies(cookieName)
' Save it for future reference and use.
m_authCookie = authCookie
End If
Return response
End Function ' GetWebResponse
Подсказка 4. Вышеуказанные методы не будут работать, если вы не установили пакет обновления 1 + 2 в SSRS 2008 R2...
Подсказка 5: Метод TranslateParameters существует, потому что вы не можете (по дизайну) переводить подсказки параметров на несколько языков по SSRS, поэтому вы пишете:
Raum / Local / Locale / Room
который использует схему:
Text_DE / Text_FR / Text_IT / Text_EN
И затем разделите на текст "/" на текст (это небольшая ошибка, если текст приглашения содержит "/" где-то), а затем выберите правильный текст по индексу языка, выбрав MIN (splitarray. длина, индекс) btw, на всякий случай, где-то у вас есть только Text_DE/Text_FR или что-то еще, сначала проверяя, содержит ли текст//вообще.
Подсказка 6: Нужно ли продолжать? (я все еще могу расширить этот пост до десятикратного размера, но я думаю, что я должен вернуться к работе сейчас:))
Если вы хотите увидеть, как выглядит f * вверх, так это то, как vanilla ssrs отображается в chrome
Это то, что похоже на IE11, с совместимостью IE5, установленной через xua
И это то, что должно быть, и то, что вы можете получить, чтобы визуализировать с помощью большого количества javascript и CSS
Добавление:
О, и он становится еще лучше
Если вы хотите запустить reportviewer на языке, указанном вашим приложением (который не идентичен языку браузера), вам нужно установить культуру reportviewer в культуру, указанную в вашей строке запроса...
<script type="text/C#" runat="server">
protected override void InitializeCulture()
{
string sprache = System.Web.HttpContext.Current.Request.QueryString["in_sprache"];
// System.Web.HttpContext.Current.Response.Write(sprache);
switch(System.Globalization.CultureInfo.InvariantCulture.TextInfo.ToLower(sprache))
{
case "fr":
sprache = "fr-CH";
break;
case "it":
sprache = "it-CH";
break;
case "en":
sprache = "en-US";
break;
default:
sprache = "de-CH";
break;
}
// System.Web.HttpContext.Current.Response.Write(sprache);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(sprache);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(sprache);
base.InitializeCulture();
}
</script>
Если вы хотите установить статическую культуру, вы можете сделать это в объявлении страницы
<%@ Page UICulture="de" Culture="de-CH" %>
И если вы попытаетесь удалить значок печати и подачу атома, сделав это со стилями, как бы то ни было, он работает только в Chrome...
input[type="image"][title="Drucken"], input[type="image"][title="Print"], input[type="image"][title="Imprimer"], input[type="image"][title="Stampa"]
{
display: none !important;
}
input[type="image"][title="In Datenfeed exportieren"], input[type="image"][title="Exporter vers un flux de données"], input[type="image"][title="Esporta in feed di dati"], input[type="image"][title="Export to Data Feed"]
{
display: none !important;
}
*/
input[type="image"][src$="Microsoft.Reporting.WebForms.Icons.Print.gif"] {
display: none !important;
}
input[type="image"][src$="Microsoft.Reporting.WebForms.Icons.AtomDataFeed.gif"] {
display: none !important;
}
Но вы действительно можете удалить хотя бы значок печати в Internet Explorer, добавив ShowPrintButton="false"
в элемент управления reportviewer:
<RS:ReportViewerHost ID="ReportViewerControl" ShowPrintButton="false" runat="server" />
Другая идея: в SSRS 2012 и 2014 (и, возможно, 2008R2) вы также можете добавить свой javascript-метод SSRS-fixing в add_pageLoaded из ScriptManager. Вот так:
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () { fixReportingServices('rpt-container'); });
Тогда вам не нужно слушать события изменения страницы, что ускоряет работу, потому что загружается только один раз в конце каждого обновления.
Потому что в Интернете IE не имеет разрешения на совместимость,
<meta http-equiv="X-UA-Compatible" content="IE=5">
также не поможет вам с определенными проблемами (rotate270 text/vertical text).
Даже в IE он работает только правильно, когда вы находитесь в интрасети, потому что только тогда он использует "представление совместимости". В то время как мета-тег устанавливает brower в IE5-Quirksmode, он не включает "представление совместимости", поэтому это не истинный quirksmode...
MS Report Viewer Control будет работать нормально только в IE. Вы можете просмотреть отчеты из других браузеров, но вы не сможете просмотреть параметр масштабирования
См. следующие статьи MSDN для совместимости браузера и элементов управления ReportViewer:
Я не заметил никакой реальной проблемы с его отображением в Firefox или Safari. Время от времени я думаю, что это может быть улучшено в Firefox, но у меня нет реальных ориентиров, чтобы поддержать это.
От бедра и, возможно, немного затхлый. ASP.NET используется для обработки любого браузера, не являющегося браузером IE, как коробка скал. Может быть стоит посмотреть, если ваши проблемы с опытом.
http://weblogs.asp.net/fmarguerie/archive/2005/01/04/346222.aspx
SSRS отлично работает на IE6,7,8. Он работает на Firefox и Safari, но с отображением проблем.
Есть два возможных решения, чтобы исправить их, проверить и посмотреть, какие из них будут работать для вас.
Решение 1
Перейдите к
C:\Program Files\Microsoft SQL Server\MSSQL. (Ваш сервер отчетов экземпляр)\Отчетность Услуги\ReportServer\Страницы\reportviewer.aspx
Обновить стиль как
<body style="margin: 0px; overflow: auto"> ... <RS:ReportViewerHost style="display:table;" ID="ReportViewerControl" runat="server" />
Решение 2
Добавьте следующие изменения в таблицу стилей:
.DocMapAndReportFrame {min-height: 660px; мин-ширина: 1280 пикселей; }
.MenuBarBkGnd {min-width: 1000px; }
Проблемы с рендерингом существуют с Firefox, Chrome и Safari. Я знаю, что для Firefox и Chrome есть надстройки IE, которые позволяют запускать отчет на вкладке Firefox/Chrome.