85

レポート サービスをバージョン 2008 から別のサーバー バージョン 2008 R2 に移行しました。バージョン 2008 では、レポートは Safari で正常に機能します。新しいバージョン 2008 R2 では、レポートがまったく表示されません。パラメータ セクションしか表示されず、レポートは空白です。Chromeでも同じです。Microsoft Safari によると、制限付きの場合はサポートされています。レポートは複雑ではありません。実際、Safari で表示されるかどうかを確認するために行のみを含むレポートを作成しましたが、表示されません。そのレポートも完全に空白です。SSRS レポートを Safari で表示できるようにした人はいますか? ある種の構成設定をいじる必要がありますか?

4

10 に答える 10

110

究極のソリューション (SSRS 2012 でも動作します!)

次のスクリプトを次のファイル (SSRS サーバー上) に追加します。
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js

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

:azzlakが指摘したように、divの名前は常にではありませんctl31_ctl10。SQL 2012 の場合は try ctl32_ctl09、2008 R2 の場合は try を試してくださいctl31_ctl09。この解決策がうまくいかない場合は、ブラウザから HTML を見て、スクリプトが正しく機能してoverflow:autoプロパティを に変更しているかどうかを確認してくださいoverflow:visible


ReportViewer コントロールのソリューション

このスタイル行を.aspxページ (または利用可能な場合はリンクされたファイル) に挿入します。.css

#reportViewer_ctl09 {
  overflow:visible !important;
 }

理由

Chrome と Safari はoverflow:auto、IE とは異なる方法でレンダリングされます。

SSRS HTML は QuirksMode HTML であり、IE 5.5 のバグに依存しています。非 IE ブラウザーには IE quirksmode がないため、HTML を正しくレンダリングします。

SSRS 2008 R2 レポートによって作成された HTML ページには、スタイルdivを持つ が含まれておりoverflow:auto、レポートが非表示のレポートに変わります。

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

Chrome の Dev Tools ( ) を使用して、生成された Web ページで手動で変更overflow:autoすることにより、Chrome でレポートを表示できます。overflow:visibleF12


私はティムのソリューションが大好きです。簡単で効果的です。

しかし、まだ問題があります: ユーザーがパラメーターを変更するたびに (私のレポートはパラメーターを使用します!)、AJAX が div を更新すると、overflow:autoタグが書き換えられ、スクリプトはそれを変更しません。

このテクニカルノートの詳細は、何が問題なのかを説明しています:

これは、AJAX パネルで構築されたページでは、ページ全体を更新せずに AJAX パネルのみが状態を変更するために発生します。したがって、タグOnLoadに適用したイベントは<body>、ページが最初に読み込まれたときに 1 回だけ発生します。その後、AJAX パネルを変更しても、これらのイベントはトリガーされなくなります。

ユーザー einarq がこの解決策を提案しました:

もう 1 つのオプションは、関数の名前を pageLoad に変更することです。この名前の関数は、部分的な更新のたびに、ページに存在する場合、asp.net ajax によって自動的に呼び出されます。これを行うと、 body タグから onload 属性を削除することもできます

そのため、ソリューションに示されている改善されたスクリプトを作成しました。

于 2011-08-29T10:42:48.127 に答える
27

SizeToReportContent="true"以下に示すように含めるだけです

<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="True"...
于 2012-11-23T05:50:45.253 に答える
23

SQL 2008 R2 SP1 で Chrome バージョン 21 を使用していますが、上記の修正はどれもうまくいきませんでした。以下は、他の回答と同様に、 「C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js」に追加するためにこのコードを追加したコードです。 SSRS サーバー) :

//Fix to allow Chrome to display SSRS Reports
function pageLoad() { 
    var element = document.getElementById("ctl31_ctl09");
    if (element) 
    {
        element.style.overflow = "visible";         
    } 
}
于 2012-08-22T19:36:32.660 に答える
14

これは既知の問題です。問題は、divタグのスタイルが「overflow:auto」であるということです。これは、SafariとChromeで使用されるWebKitではうまく実装されていないようです(EmanueleGrecoの回答を参照)。RS:ReportViewerHost要素を使用するというEmanueleの提案を利用する方法がわかりませんでしたが、JavaScriptを使用して解決しました。

問題

ここに画像の説明を入力してください

解決

「overflow:auto」は、idが「ctl31_ctl10」のdiv要素のstyle属性で指定されているため、スタイルシートファイルでオーバーライドできないため、JavaScriptを使用しました。「C:\ ProgramFiles \ 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);
}

ノート

私が試したことのないSSRS2005の解決策があるようですが、「DocMapAndReportFrame」クラスが見つからないため、SSRS2008には適用できないと思います。

于 2011-08-12T16:39:39.497 に答える
12

上記のアイデアに基づく私のソリューション。

function pageLoad() {
    var element = document.querySelector('table[id*=_fixedTable] > tbody > tr:last-child > td:last-child > div');
    if (element) {
        element.style.overflow = "visible";
    } 
}

特定の ID に限定されず、jQuery などの他のライブラリを含める必要もありません。

于 2015-01-17T19:51:14.713 に答える
11

Report Server 2008 R2に使用したソリューションは次のとおりです

レポート サーバーがテーブルの「id」属性で使用するために何を出力するかに関係なく、機能するはずです。「ctl31_fixedTable」になると常に想定できるとは思いません

上記の提案と、ここにあるjavascriptファイルからjqueryライブラリをページに動的にロードするいくつかの方法を組み合わせて使用​​ しました

サーバーで次のディレクトリに移動します: C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js

jquery ライブラリ jquery-1.6.2.min.js をディレクトリにコピーします。

ファイル ReportingServices.js のバックアップ コピーを作成します ファイルを編集します。そして、これをその下に追加します:

var jQueryScriptOutputted = false;
function initJQuery() {

    //if the jQuery object isn't available
    if (typeof(jQuery) == 'undefined') {


        if (! jQueryScriptOutputted) {
            //only output the script once..
            jQueryScriptOutputted = true;

            //output the script 
            document.write("<scr" + "ipt type=\"text/javascript\" src=\"../js/jquery-1.6.2.min.js\"></scr" + "ipt>");
         }
        setTimeout("initJQuery()", 50);
    } else {

        $(function() {     

        // Bug-fix on Chrome and Safari etc (webkit)
        if ($.browser.webkit) {

            // Start timer to make sure overflow is set to visible
             setInterval(function () {
                var div = $('table[id*=_fixedTable] > tbody > tr:last > td:last > div')

                div.css('overflow', 'visible');
            }, 1000);
        }

        });
    }        
}

initJQuery();
于 2012-09-19T19:07:34.577 に答える
2

Emanuele によって提供されたソリューションは私にとってはうまくいきました。サーバーから直接アクセスした場合はレポートを表示できましたが、aspx ページで ReportViewer コントロールを使用した場合はレポートを表示できませんでした。レンダリングされた HTML を調べたところ、id "ReportViewerGeneral_ctl09" ( ReportViewerGeneralはレポート ビューアー コントロールのサーバー ID) の div が見つかりました。この div のオーバーフロー プロパティは auto に設定されています。

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

Emanuele が説明した手順を使用して、次のようにこれを表示に変更しました。

function pageLoad() {
    var element = document.getElementById("ReportViewerGeneral_ctl09");

    if (element) {
        element.style.overflow = "visible";
    }
}
于 2012-10-03T06:55:19.483 に答える
2

私はこれを使用しました。Report.aspx ページに jquery へのスクリプト参照を追加します。以下を使用して、JQuery を Microsoft イベントにリンクします。オーバーフローを設定するために Eric の提案を少し使用しました。

$(document).ready(function () {
    if (navigator.userAgent.toLowerCase().indexOf("webkit") >= 0) {        
        Sys.Application.add_init(function () {
            var prm = Sys.WebForms.PageRequestManager.getInstance();
            if (!prm.get_isInAsyncPostBack()) {
                prm.add_endRequest(function () {
                    var divs = $('table[id*=_fixedTable] > tbody > tr:last > td:last > div')
                    divs.each(function (idx, element) {
                        $(element).css('overflow', 'visible');
                    });
                });
            }
        });
    }
});
于 2013-04-08T14:36:21.107 に答える