83 votes

Impossible de visualiser les rapports SSRS 2008 R2 - SSRS 2012 dans Safari / Chrome mais fonctionne correctement dans FireFox / IE8 ... Pourquoi?

J'ai quelques rapports simples dans SSRS 2008 R2, mais ils ne s'affichent pas du tout dans Safari ou Chrome. Selon Microsoft Livres en Ligne, ces navigateurs sont pris en charge de manière limitée. Cependant, je ne peux pas voir quoi que ce soit après les données de "Chargement" de l'horloge complète. La barre de paramètres et de mie de pain section de navigation en haut de la page sont tous là. Aussi, je peux Enregistrer/Exporter vers n'importe quel format sur Safari et Chrome. Il ne peut pas afficher le rapport de la section elle-même, qui est juste vide.

Je suis supposé utiliser les certificats et les connexions sécurisées (actuellement pas de programme d'installation avec https, http uniquement)? Il n'existe aucun serveur de côté les configurations qui ont besoin d'être modifié? Quelqu'un a eu le succès de l'affichage de TOUS les rapports sur Safari/Chrome à l'aide précédente SSRS versions (2005)?

Je suis à l'aide de Safari 5.0.4 et Chrome 10.0.648.151. Je sais que la similitude de ces deux navigateurs est, ils sont tous deux basés sur WebKit.

Le rapport affiche correctement sur IE8 (bien sûr) et de FireFox 4.0.

Serait vraiment reconnaissant si quelqu'un peut jeter un peu de lumière.

Merci à l'avance. - Greg

94voto

Emanuele Greco Points 5089

Ultime solution (Aussi dans SSRS 2012)

  1. Modifier "C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js" (sur le Serveur SSRS)
  2. Ajoutez le script suivant:

'

   function pageLoad() {    
    var element = document.getElementById("ctl31_ctl09");
    if (element) 
    {
        element.style.overflow = "visible"; 
    } }

FAIT!

Attention: div du nom n'est pas toujours ctl31_ctl09: dans mon cas, c'est (avec un service pack antérieur, il a été ctl31_ctl10, au lieu de cela).
Si cette solution ne fonctionne pas, regardez le code HTML de votre navigateur pour voir si le script a fonctionné correctement la modification de la overflow:auto de la propriété d' overflow:visible; vous devez changer div nom dans la sctipt, peut-être.


Explication

Chrome et Safari rendre overflow:auto dans les différentes façon de respect pour IE.
La page HTML produite par SSRS 2008 R2 rapports contient un div qui a overflow:auto style, et il s'avère rapport dans un invisible rapport.

<div id="ctl31_ctl09" style="height:100%; width:100%; 
  overflow:auto; position:relative;">
 ...
</div>

Changer manuellement (à l'aide de google Chrome fenêtre de débogage - F12) ma dernière HTML overflow:auto dans overflow:visible , je peux voir les rapports sur Chrome.

J'adore Tim solution, c'est facile et de travail.

Mais il y a encore un problème: tout le temps à l'utilisateur de changer les paramètres (mes rapports d'utiliser des paramètres!) AJAX actualise la div, le overflow:auto balise est réécrit, et pas de modifications de script.
Cette note technique détaillée explique ce qu'est le problème.

Cela se produit parce que dans une page construite avec l'AJAX panneaux, seulement l'AJAX panneaux de changer leur état, sans rafraichissement de la page entière. Par conséquent, les événements OnLoad vous avez appliqué sur l'étiquette ne sont tiré une fois: la première fois que votre page se charge. Après cela, le fait de changer de l'AJAX panneaux ne sera pas déclencher ces événements plus.

M. einarq m'a suggéré la solution ici.

Une autre option est de renommer votre fonction pour pageLoad. Toutes les fonctions de ce nom sera appelé automatiquement par asp.net ajax s'il existe sur la page, également après chaque mise à jour partielle. Si vous faites cela, vous pouvez également supprimer l'attribut onload de la balise body

C'est ce qu'écrivait la j'ai amélioré le script qui est indiqué dans la solution.

43voto

Ryan Points 986

En fonction de CSS Solution

J'ai été en mesure d'ajouter ce qui suit à la feuille de style pour Reporting Services, et il a fixé pour moi sur Chrome.

Avertissement: Ce n'est pas testés pour la compatibilité inter-navigateur.

/**************CHROME BUG FIX*****************/
div#ctl31_ctl09,
div#ctl31_ctl10
{
 overflow: visible !important;
}
/*********************************************/

Ajoutez à cela le début de l' ReportingServices.css le fichier.

Pour moi, ce fichier est situé à:

C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\Styles\ReportingServices.css

18voto

Tim Partridge Points 993

C'est un problème connu. Le problème est qu'une balise div a le style "overflow: auto", ce qui apparemment n'est pas bien mis en œuvre avec WebKit utilisé par Safari et Chrome (voir Emanuele Greco réponse). Je ne savais pas comment prendre avantage de Emanuele suggestion d'utiliser le RS:ReportViewerHost élément, mais je l'ai résolu en utilisant JavaScript.

Problème

enter image description here

Solution

Depuis "overflow: auto" est spécifié dans l'attribut style de l'élément div avec l'id "ctl31_ctl10", on ne peut pas le remplacer dans un fichier de style, donc j'ai eu recours à JavaScript. J'ai ajouté le code suivant "C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js"

function FixSafari()
{    
    var element = document.getElementById("ctl31_ctl10");
    if (element) 
    {
        element.style.overflow = "visible";  //default overflow value
    }
}

// Code from http://stackoverflow.com/questions/9434/how-do-i-add-an-additional-window-onload-event-in-javascript
if (window.addEventListener) // W3C standard
{
    window.addEventListener('load', FixSafari, false); // NB **not** 'onload'
} 
else if (window.attachEvent) // Microsoft
{
    window.attachEvent('onload', FixSafari);
}

Note

Il semble y avoir une solution pour SSRS 2005 que je n'ai pas essayé, mais je ne pense pas qu'il est applicable à SSRS 2008 parce que je ne trouve pas le "DocMapAndReportFrame" de la classe.

7voto

Gawain Points 11

CSS Système à Base de Solution à l'Échelle de

Ceci nécessite pas de javascript ou de l'Ajax de cadres ou de tout autre emballage. Testé sur IE, Firefox, Chrome et Safari.

Cela peut être fixée à la Feuille de Style au niveau du Serveur de Rapports.

Tout d'abord, accédez au répertoire dans lequel est installé reporting services, dans mon cas (MSSQL 2012SP1) c'est:

C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer

Dans ce répertoire, vous trouverez un fichier nommé reportserver.config

voir http://msdn.microsoft.com/en-us/library/ms345247(v=sql.110).aspx

Dans ce fichier, insérez une seule XML en ligne, comme: (à partir du document ci-dessus)

<Configuration>
...
          <HTMLViewerStyleSheet>SafariChromeFix</HTMLViewerStyleSheet>
...
</Configuration>

Enregistrer que.

Ce qu'ils ne vous disent dans le lien ci-dessus, c'est que cette entrée remplace la feuille de style par défaut complètement. Mes premières tentatives pour obtenir les rapports de rendre travaillé par l'ajout d'un div de la feuille de style, tout le reste a été brisé. Une fois que j'ai compris que cette édition de la reporserver.fichier de configuration n'a pas augmenté, mais remplace la feuille de style par défaut, je l'ai copiée dans la feuille de style par défaut et tout a commencé à travailler.

Ensuite, descendez dans les Styles de répertoire (C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\Styles)

Faire une copie du fichier nommé SP_Full.css et le nom de la copie SafariChromeFix.css. À ce stade, SafariChromeFix.css devrait être identique à SP_Full.css.

Edit SafariChromeFix.css et ajoutez les lignes suivantes en haut:

div {
overflow: visible !important;
}

L'enregistrer.

Une fois que c'est enregistré, tous les rapports existants sur cette instance de Reporting Services rendu sur tous les navigateurs, y compris google Chrome et Safari.

Veuillez Noter:

Il est non seulement possible, mais extrêmement probable que reportserver.config seront remplacés par des mises à jour de reporting services, de sorte que vous pourriez avoir à ajouter de l' <HTMLViewerStyleSheet>SafariChrome</HTMLViewerStyleSheet> balise en elle au fil du temps.

Cela nous donne également un endroit de rupture dans la feuille de style par défaut et faire beaucoup d'autres modifications personnalisées à partir de quelque chose qui est déjà au travail. Et puisque ce n'est pas la feuille de style par défaut, votre nouveau fichier css spécifique n'est pas remplacé lors de mises à jour et des correctifs.

Je travaille avec Microsoft pour voir si il y a un moyen de ne pas avoir à modifier directement reportserver.config. Je vais mettre à jour ici quand j'ai la réponse.

4voto

Jabran Ali Points 21

Dans mon cas, la DIV incriminée est "ctl31_ctl09", donc si la solution ci-dessus ne fonctionne pas, essayez de modifier var element = document.getElementById("ctl31_ctl10"); en var element = document.getElementById("ctl31_ctl09");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X