2009-02-27 9 views

Répondre

0

Je n'ai pas remarqué de problème avec l'affichage de Firefox ou de Safari. À certains moments, je pense qu'il pourrait être rendu meilleur dans Firefox, mais je n'ai pas de benchmarks réels pour le sauvegarder.

+0

Êtes-vous aveugle? Bordures de table, texte vertical (rotation 270), alignement d'image, champs de texte (tout ce qui n'est pas dans la table), largeur de bordure etc.Vous pouvez prendre 3 versions différentes d'Internet Explorer, et vous obtenez 3 résultats différents. –

0

SSRS fonctionne parfaitement sur IE6,7,8. Cela fonctionne sur Firefox et Safari, mais avec des problèmes d'affichage.

Il existe deux solutions possibles pour résoudre ces problèmes, tester et voir ce qui fonctionne pour vous.

Solution 1

Aller à

C:. \ Program Files \ Microsoft SQL Server \ MSSQL (votre serveur de rapports instance) \ rapports Services \ ReportServer \ Pages \ ReportViewer .aspx

style mise à jour comme

<body style="margin: 0px; overflow: auto"> ... <RS:ReportViewerHost style="display:table;" ID="ReportViewerControl" runat="server" /> 

Solution 2

Ajouter à la suite de modifications stylesheet:

.DocMapAndReportFrame {min-height: 660px; min-largeur: 1280px; }
.MenuBarBkGnd {min-width: 1000px; }

+1

Citation: "SSRS fonctionne parfaitement sur IE6,7,8". Oui, mais pas dans IE 9, 10 & 11 ... Quelqu'un de sain d'esprit encore en utilisant IE <= 8? Citation: "afficher les problèmes" Ils n'affichent pas les problèmes. Ils sont des bogues dans SSRS - le HTML généré est quirks, aka WRONG. –

0

Problèmes de rendu existent avec Firefox, Chrome et Safari. Je sais que pour Firefox et Chrome, il existe des compléments IE qui vous permettent d'exécuter le rapport dans un onglet Firefox/Chrome.

3

MS Report Viewer Control fonctionnera correctement dans IE uniquement. Vous pouvez voir les rapports d'autres navigateurs, mais vous ne pouvez pas en mesure de voir Zoom Option

+0

L'option de zoom sera le moindre de vos problèmes. –

24

Edition - 2016/2017 Mise à jour

SSRS 2016+ peut dire être cross-browser compatible.
Les bordures de tableau ne s'affichent pas correctement dans IE10, mais IE10 est en train de disparaître de toute façon.
Dans le reste des navigateurs, ça va.

Vous devez toujours enregistrer add_pageLoaded pour traduire les invites de paramètre.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { fixReportingServices('rpt-container'); }); 

En outre, comme dans les versions < 2016, vous devez ajouter PageCountMode="Actual"-RS:ReportViewerHost contrôle.

<RS:ReportViewerHost ID="ReportViewerControl" PageCountMode="Actual" runat="server" /> 

si vous voulez avoir des numéros de pagination significatifs.

De plus, il y a un problème lorsque vous définissez la langue dans la chaîne de requête avec des datpickers (avec SSRS < 2016 également). Vous devez définir context.Request.UserLanguages[i] dans la langue spécifiée dans la chaîne de requête dans context.BeginRequest dans un module HTTP si vous souhaitez que datepicker fonctionne avec un langage autre que celui du navigateur. De plus, vous devez ajouter les en-têtes HTTP X-Frame-Options et Content-Security-Policy dans chaque réponse HTTP, si vous voulez utiliser SSRS dans un iframe sur Internet en toute sécurité. Voir my github-repository for details.

</EndEdit> 

pré-2016:

Je peux vous dire, j'ai 9 ans d'expérience avec la fichue chose (SSRS 2005, SSRS 2008 R1 & R2, 2012 et 2014 SSRS). Permettez-moi de vous assurer que parce que les rapports HTML SSRS dépendent de IE5-Quirksmode, il n'y a aucune chance qu'ils soient rendus correctement dans n'importe quel navigateur autre qu'Internet Explorer (IE < 10 que je pourrais être enclin à ajouter). Si vous avez un accès admin au serveur de rapports, et je souligne le IF, vous pouvez ajouter des routines jQuery et CSS sur la page ReportViewer pour corriger les problèmes les plus basiques (comme si vous ne voyez pas plus de 1cm du rapport), mais sinon, le rendu HTML sera toujours absolument horrible (marges, bordures de tableau, paddings d'image, taille de colonne, taille de champ de texte, alignement de titre et/ou de numéro de pagination, etc.),

Bien sûr, le contrôle d'imprimante ActiveX ne peut fonctionner que dans InternetExplorer (sous Windows), car seuls les ActiveX sont pris en charge. Permettez-moi aussi de vous assurer qu'il n'y a absolument aucun moyen de faire fonctionner ReportManager dans un autre navigateur que IE. En ce qui concerne la prise en charge d'Internet Explorer, il convient de mentionner qu'à partir de IE version 10, IE est par défaut webkit-quirksmode (pour des raisons de compatibilité) au lieu de IE5 quirksmode, donc le rendu HTML sera aussi horrible que dans Chrome./Firefox/Safari pour IE 10+, sauf si vous avez ajouté IE5 compatible avec meta xua dans la page ReportViewer.aspx.

Ce dernier pourrait ne pas demander Intranet, comme IE revient automatiquement à IE 7 en mode de compatibilité quand il est sur un site intranet (mais seulement dans une version de Windows 8 <).Dans Windows 8, les liens localhost et les liens d'ordinateur (impossible d'ajouter les messages http: // dans les messages stackoverflow) ne sont pas affectés à la zone intranet locale (probablement comme un hack rapide, donc IE ne dépend pas de la compatibilité IE7 mode), et par conséquent, l'authentification Windows échouera.

Il convient également de mentionner qu'il n'est pas possible d'ajouter IE5 compatible avec meta xua pour ReportManager, car il n'y a pas de page que vous pouvez éditer (projet-site ASP.NET non-modifiable compilé ...).
Et si vous n'avez pas besoin des dev-tools pour passer en mode quirksmode, il n'est pas possible d'utiliser ReportManager dans IE 10+. Ensuite, une autre chose à mentionner est que, à partir de IE9, IE hérite du doctype des éléments iframe de la page parent, et il n'y a aucun moyen de changer cela (sans changer la page parente à la page-enfant doc-mode). Donc, si vous aviez assez d'intelligence pour utiliser les iframes pour les rapports, parce qu'il n'y a pas moyen qu'une personne sensée veuille des popups à l'ère des popup-blockers, la page de rapport héritera du doctype de la page parente. Si ce n'est pas IE5-QuirksMode, cela rendra les rapports tout aussi horribles que sur Safari/Chrome/Firefox/Opera pour n'importe quel IE> 8, indépendamment de toute balise ie5 méta-compatible dans ReportViewer.aspx. En ce qui concerne les alternatives, gratuitement et avec un ensemble de fonctionnalités similaire, il n'y a que Eclipse BIRT (heureusement, le rendu HTML n'est pas similaire). Il convient de mentionner que BIRT, bien que sous licence Eclipse Public License, utilise SUN Java et que vous utilisez par conséquent la technologie Oracle, qui est soumise à ses conditions de licence respectives.
En outre, vous utilisez une technologie non-Microsoft, et les rendus BIRT Excel-Sheets sont en fait des fichiers XML, qui produiront (qui aurait deviné) un avertissement plutôt alarmant lors de l'ouverture dans Office 2010+. Puis, pour un montant relativement élevé, il y a http://www.stimulsoft.com rapports, et des rapports Telerik. Du point de vue technique, je recommande des rapports stimululsoft, mais: disclaimer, je n'ai pas utilisé l'un ou l'autre, car ils ne sont pas gratuits. En ce qui concerne les moteurs de rendu SSRS alternatifs (pas les téléspectateurs btw), il n'y a que www.fyireporting.com/, qui a une fourchette ici http://www.codeproject.com/Articles/138271/An-Open-Source-RDL-Engine. Mais fyiReporting est incomplet et fonctionne en cours (s'il n'est pas abandonné), donc je m'abstiendrai de l'utiliser.


En bout de ligne, si votre produit est IE & Windows uniquement, avec la version Windows 8 < (et non - pas < = juste au cas où vous ne l'avez pas fait attention), dans l'intranet, appelé de pop- ups et pas iframes, puis aller avec SSRS. Pour tout le reste, utilisez les rapports stimulsoft (le problème est, vous devez refaire tous vos rapports, car il n'y a pas de migration automatisée - même pas de travail).

PS:
Et en ajoutant « un peu javascript », je veux dire la chose ci-dessous (2008 R1 édition, ne fonctionnera pas sur 2008R2 +, peut travailler sur 2005, et notez que vous devez intégrer jQuery et jQuery Migrate dans une balise de script en ligne, si les PC clients n'ont pas accès à http (s): //ajax.aspnetcdn.com [note: placer les scripts dans le dossier Pages et ajouter un lien relatif ou absolu ' t travail ...]):

<%@ 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> 

Note: UpdateLock provient de 2012 backport et n'est pas vraiment utilisé ici, et la langue provient de backport aussi setInterval sur TranslateParameterPrompts est nécessaire en 2012 et la fonction pour 2012 n'a que le petit ajout de "label" dans le sélecteur 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); 
    } 

la langue de inférer la langue du navigateur va comme ceci, 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> 

Et en 2012, vous devez disposer des cookies de session, sinon vous obtenez « HTTP 400: en-tête trop long » après l'ouverture d'environ 120 rapports:

<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> 

Et sur 2012, vous devez écouter mise à jour du contenu, car il utilise des contrôles 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 

et notez que pour 2012, setTableSize est alterTableBorderWidth, et le sélecteur se présente comme suit:

function alterTableBorderWidth() 
     { 
      //$('*') 
      $("[id$='ReportViewerControl']").find('*') 
      .each(function() { 

Btw, si vous voulez supprimer l'icône PRINT, car ce n'est qu'une source de chagrin, ça va comme ça (pour l'allemand, l'anglais, le français et l'italien [les langues parlées en Suisse + anglais]).

Ce CSS est pour 2008 R1, ne savent pas et de soins si elle est la même chose en 2012.

input[type="image"][title="Drucken"], input[type="image"][title="Print"], input[type="image"][title="Imprimer"], input[type="image"][title="Stampa"] 
{ 
    display: none !important; 
} 

Et si cela ne fonctionne toujours pas vous décourager, puis allez à droite formes avant et utiliser l'authentification en SSRS 2012 (indice 1: il n'y a pas d'échantillon ms-provied comme pour 2005-2008R2, vous devez l'écrire vous-même);)

Hint2: si vous avez suivi hint1, la redirection d'authentification par formulaires ne fonctionne pas lorsque vous avez un deux points dans l'URL [bug?], vous pouvez voler le code de mono et écrire votre propre redirection. Hint3: si vous avez suivi hint2 et que l'authentification par formulaires fonctionne, alors vous voudrez probablement changer l'outil de téléchargement que vous allez écrire, car vous n'aimerez pas le faire manuellement "pour chaque rapport browse-directory - check case Autoriser override - rapport de téléchargement - set source de données) pour 120 rapports ou plus, alors vous serez Héritière d'une classe de ReportingService2005 et passer outre GetWebRequest et 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 

Conseil 4: Les méthodes ci-dessus ne fonctionnera pas si vous havre de paix 't installé le service pack 1 + 2 sur SSRS 2008 R2 ...

Indice 5: Les paramètres Translate ODE est là parce que vous ne pouvez pas (par conception) traduire les invites de paramètre à plusieurs langues par SSRS, vous écrivez donc:

Raum/Local/Locale/Room 

qui utilise le schéma:

Text_DE/Text_FR/Text_IT/Text_EN 

Et puis ne divisé par «/» sur le texte (qui est une petite erreur sujette si votre texte d'invite contient '/' quelque part), puis sélectionnez le bon texte par index de la langue, en choisissant MIN (splitarray.length, index) btw, juste au cas où vous n'avez que Text_DE/Text_FR ou autre chose, vérifiez d'abord si le texte contient un '/', bien sûr.

Indice 6: Dois-je continuer? (Je pourrais encore étendre cette publication à dix fois la taille, mais je pense que je devrais retourner au travail maintenant :))

Si vous voulez voir à quel point il semble, c'est comment vanille ssrs rend en chrome

Vanilla SSRS chrome

C'est ce qu'il ressemble à IE11, avec une compatibilité IE5 réglée via xua

Geb

et voici ce qu'il devrait être, et ce que vous pouvez l'obtenir pour rendre avec beaucoup bricoler avec javascript et CSS SSRS in Chrome with CSS and JS applied

Addendum:
Oh, et il y a encore mieux

Si vous voulez exécuter ReportViewer dans une langue spécifiée par votre application (ce qui est identique à la langue du navigateur), vous devez définir la culture de ReportViewer à la culture spécifiée dans votre chaîne de requête ...

<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> 

Si vous souhaitez définir une culture statique, vous pouvez le faire dans la déclaration de la page

<%@ Page UICulture="de" Culture="de-CH" %> 

Et si vous essayez de supprimer le l'icône d'impression et l'atome d'alimentation, de le faire avec des styles, peu importe comment, il ne fonctionne que dans 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; 
    } 

Mais vous pouvez effectivement supprimer au moins l'icône d'impression dans Internet explorer en ajoutant ShowPrintButton="false" au contrôle ReportViewer:

<RS:ReportViewerHost ID="ReportViewerControl" ShowPrintButton="false" runat="server" /> 

Une autre idée: SSRS 2012 & 2014 (et peut-être 2008R2), vous pouvez également ajouter votre méthode javaScript de réparation SSRS dans add_pageLoaded de ScriptManager. Comme ceci:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { fixReportingServices('rpt-container'); }); 

alors vous n'avez pas écouter la page des événements de changement, ce qui accélère les choses, parce que chargé est appelée une seule fois à la fin de chaque mise à jour.

AVERTISSEMENT

Parce que dans Internet, IE ne fait pas défaut à la vue de la compatibilité,

<meta http-equiv="X-UA-Compatible" content="IE=5"> 

ne vous aidera pas à certaines questions, soit (texte rotate270/texte vertical).

Même dans Internet Explorer, il ne fonctionne correctement que lorsque vous vous trouvez sur l'intranet, car il utilise alors uniquement la "vue de compatibilité". Alors que le méta-tag définit le navigateur dans IE5-Quirksmode, il n'active pas la "compatibilité view", donc ce n'est pas le vrai quirksmode ...

+0

tl; version dr - Ce n'est pas très compatible. Réponse très approfondie cependant. – akousmata

+1

Aussi, voir: http://www.experts-exchange.com/Database/MS-SQL-Server/MS-SQL_Reporting/Q_28124478.html –

+0

+1 pour toutes ces infos! (Vive le mode IE5-Quirks, pas!) –

Questions connexes