SSRS 2008 R2 - SSRS 2012 - ReportViewer:Safari/Chrome中的报告但在Firefox/Internet Explorer 8中运行良好...为什么?

Gre*_*g H 82 reportviewer reporting-services ssrs-2008 ssrs-2012

我有一些简单的报告SSRS 2008 R2,但它们根本不会在Safari或Chrome中显示.根据微软的在线书籍,这些浏览器的支持方式有限.但是,在"加载"时钟数据完成后,我看不到任何内容.页面顶部的参数栏和面包屑导航部分都在那里.此外,我可以保存/导出到Safari和Chrome上的任何格式.它只是不会显示报告部分本身,这只是空白.

我应该使用证书和安全连接(目前没有使用HTTPS设置,只有HTTP)?是否需要调整任何服务器端配置?有没有人使用之前的SSRS版本(2005)成功显示有关Safari/Chrome的任何报告?

我正在使用Safari 5.0.4Chrome 10.0.648.151.我知道这两种浏览器的相似之处在于它们都基于WebKit.

该报告在Internet Explorer 8(当然)和Firefox 4.0上成功呈现.

如果有人能够对此有所了解,我将非常感激.

Ema*_*eco 94

终极解决方案(也适用于SSRS 2012!)

将以下脚本附加到" C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js "(在SSRS服务器上):

function pageLoad() {
    var element = document.getElementById("ctl31_ctl10");
    if (element)
    {
        element.style.overflow = "visible";
    }
}
Run Code Online (Sandbox Code Playgroud)

实际上我不知道div的名字是否总是ctl31_ctl10:在我的情况下它是(而不是发现SQL Server 2012 azzlak ctl32_ctl09).

如果此解决方案不起作用,请查看浏览器中的HTML以查看脚本是否正常工作将overflow:auto属性更改为overflow:visible.


ReportViewer控件的解决方案

将此样式行插入.aspx页面(或链接.css文件,如果可用):

#reportViewer_ctl09 {
  overflow:visible !important;
}
Run Code Online (Sandbox Code Playgroud)

原因

Chrome和Safari呈现溢出:以与Internet Explorer不同的方式自动呈现.

SSRS HTML是QuirksMode HTML并依赖于IE 5.5的错误.非IE浏览器没有IE quirksmode,因此正确呈现HTML

SSRS 2008 R2报告生成的HTML页面包含一个具有overflow:auto样式的div,它将报告转换为不可见的报告.

<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
...</div>
Run Code Online (Sandbox Code Playgroud)

手动更改(使用Google Chrome的调试窗口)最终的HTML 溢出:汽车溢出:可见我可以看到在Chrome报告.

我喜欢蒂姆的解决方案 ; 这很简单,也很有效.

但是仍然存在一个问题:用户每次更改参数时(我的报告使用参数!)AJAX刷新div,溢出:自动标记被重写,没有脚本更改它. 此技术说明详细说明了问题所在.

发生这种情况是因为在使用AJAX面板构建的页面中,只有AJAX面板才会更改其状态,而无需刷新整个页面.因此,您在标记上应用的OnLoad事件仅触发一次:第一次加载页面.之后,更改任何AJAX面板将不再触发这些事件.

辛纳克先生在这里向我提出了解决方案.

另一个选项是将您的函数重命名为pageLoad.

具有此名称的任何函数将由ASP.NET Ajax自动调用(如果它存在于页面上),也是在每次部分更新之后.如果这样做,您还可以从body标签中删除onload属性

所以我编写了解决方案中显示的改进脚本.

  • 也在SSRS 2012中工作.在我的情况下,div的id为"ctl31_ctl09".谢谢! (3认同)

Rya*_*yan 43

基于CSS的解决方案

我能够将以下内容添加到Reporting Services的样式表中,并在Chrome中为我修复了它.

免责声明:尚未对跨浏览器兼容性进行全面测试.

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

将其添加到ReportingServices.css文件的开头.

对我来说,该文件位于:

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

  • +1在所有测试的浏览器(Chrome,Safari,IE9,IE10)上都像魅力一样.在MAC OS X Chrome上也一样...... (3认同)

Tim*_*dge 18

这是一个已知问题.问题是div标签的样式为"overflow:auto",这显然不适用于Safari和Chrome使用的WebKit(参见Emanuele Greco的回答).我不知道如何利用Emanuele的建议来使用RS:ReportViewerHost元素,但我使用JavaScript解决了它.

问题

在此输入图像描述

由于在div元素的style属性中指定了"overflow:auto",其id为"ctl31_ctl10",因此我们无法在样式表文件中覆盖它,因此我使用了JavaScript.我将以下代码添加到"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 https://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);
}
Run Code Online (Sandbox Code Playgroud)

注意

似乎有一个SSRS 2005解决方案,我没有尝试,但我不认为它适用于SSRS 2008,因为我找不到"Doc​​MapAndReportFrame"类.


小智 7

基于CSS的系统范围的解决方案

这不需要任何JavaScript或Ajax框架或任何其他包装器.它在Internet Explorer,Firefox,Safari和Chrome上进行了测试.

这可以在报表服务器中的样式表级别修复.

首先,导航到安装报告服务的目录,在我的情况下(SQL Server 2012 SP1)它是:

C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer
Run Code Online (Sandbox Code Playgroud)

在该目录中,您将找到名为reportserver.config的文件.

请参阅自定义HTML查看器和报表管理器的样式表.

在该文件中插入一个XML行(来自上面的文档):

<Configuration>
...
          <HTMLViewerStyleSheet>SafariChromeFix</HTMLViewerStyleSheet>
...
</Configuration>
Run Code Online (Sandbox Code Playgroud)

保存.

他们在上面的链接中没有告诉你的是这个条目完全覆盖了默认样式表.我第一次尝试通过添加div样式表来使报表生效,其他一切都被破坏了.一旦我发现reporserver.config文件的这个编辑没有增加,但实际上替换了默认样式表,我复制了默认样式表,一切都开始工作了.

接下来,进入Styles目录(C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\Styles).

复制名为SP_Full.css的文件并将副本命名为SafariChromeFix.css.此时,SafariChromeFix.css应与SP_Full.css相同.

编辑SafariChromeFix.css并将以下行添加到顶部:

div {
    overflow: visible !important;
}
Run Code Online (Sandbox Code Playgroud)

保存.

保存后,此Reporting Services实例上的所有现有报告都将在包括Chrome和Safari在内的所有浏览器上呈现.

请注意:

这不仅是可能的,而且报告服务的更新很可能会覆盖reportserver.config,因此您可能不得不<HTMLViewerStyleSheet>SafariChrome</HTMLViewerStyleSheet>随着时间的推移将标记添加到其中.

这也为我们提供了一个突破默认样式表的地方,并从已经工作的东西开始进行许多其他自定义更改.由于它不是默认样式表,因此在升级和修补程序期间不会覆盖新的自定义CSS文件.


小智 1

我从来没有在 Chrome 中显示过任何报告。大多数 Microsoft 文档甚至没有列出它,因此我认为 Chrome 在解释 ASP 中的某些内容时一定遇到困难。

请参阅Reporting Services 和 Power View 的浏览器支持

我正在运行 Chrome 11,并且遇到与您相同的行为。