83

には簡単なレポートがいくつかSSRS 2008 R2ありますが、Safari または Chrome ではまったく表示されません。Microsoft の Books Online によると、これらのブラウザは限定的にサポートされています。ただし、データの「読み込み」クロックが完了した後、何も表示されません。ページ上部のパラメーター バーとパンくずナビゲーション セクションはすべてそこにあります。また、Safari と Chrome で任意の形式に保存/エクスポートできます。空白のレポート セクション自体は表示されません。

証明書と安全な接続を使用する必要がありますか (現在、HTTPS では設定されず、HTTP のみ)? 微調整が必​​要なサーバー側の構成はありますか? 以前の SSRS バージョン (2005) を使用して、Safari/ Chromeでレポートを表示することに成功した人はいますか?

と を使用Safari 5.0.4してChrome 10.0.648.151います。これら 2 つのブラウザーの類似点は、どちらもWebKitに基づいていることです。

レポートは、Internet Explorer 8 (もちろん) と Firefox 4.0 で正常に表示されます。

誰かがこれに光を当てることができれば、本当に感謝しています。

4

17 に答える 17

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";
    }
}

実際、divの名前が常にであるかどうかはわかりませんctl31_ctl10。私の場合はそうです(SQL Server 2012のazzlak foundではなくctl32_ctl09)。

この解決策がうまくいかない場合は、ブラウザの HTML を見て、スクリプトが適切に動作しており、overflow:autoプロパティがoverflow:visibleに変更されているかどうかを確認してください。


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

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

#reportViewer_ctl09 {
  overflow:visible !important;
}

理由

Chrome と Safari は、overflow:autoを 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>

手動で変更する (Chrome のデバッグ ウィンドウを使用) final HTML overflow:auto in overflow:visible Chrome でレポートを表示できます。

私はティムのソリューションが大好きです。それは簡単で機能します。

しかし、まだ問題があります: ユーザーがパラメーターを変更するたびに (私のレポートはパラメーターを使用します!)、AJAX が div を更新すると、overflow:autoタグが書き換えられ、スクリプトはそれを変更しません。 このテクニカルノートの詳細では、何が問題なのかを説明しています。

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

Mr.einarq はここで解決策を提案してくれました。

もう 1 つのオプションは、関数の名前を pageLoad に変更することです。

この名前の関数は、ページに存在する場合、部分的な更新のたびに、ASP.NET Ajax によって自動的に呼び出されます。これを行うと、 body タグから onload 属性を削除することもできます

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

于 2011-08-29T10:46:16.987 に答える
43

CSS ベースのソリューション

Reporting Services のスタイルシートに以下を追加することができ、Chrome で修正されました。

免責事項: これはクロス ブラウザーの互換性について完全にテストされていません。

/****************Chrome のバグ修正********************/
div#ctl31_ctl09,
div#ctl31_ctl10
{
    オーバーフロー: 目に見える!重要;
}
/************************************************/

それをファイルの先頭に追加しReportingServices.cssます。

私の場合、そのファイルは次の場所にあります。

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

于 2013-05-31T19:50:29.850 に答える
18

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

問題

ここに画像の説明を入力

解決

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

ノート

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

于 2011-08-12T16:35:31.463 に答える
7

CSS ベースのシステム全体のソリューション

これには、JavaScript や Ajax フレーム、その他のラッパーは必要ありません。Internet Explorer、Firefox、Safari、Chrome でテスト済みです。

これは、レポート サーバーのスタイル シート レベルで修正できます。

まず、Reporting Services がインストールされているディレクトリに移動します。私の場合 ( SQL Server 2012 SP1) は次のとおりです。

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

そのディレクトリには、reportserver.config という名前のファイルがあります。

HTML ビューアおよびレポート マネージャのスタイル シートをカスタマイズするを参照してください。

そのファイルに、(上記のドキュメントから) 次のような単一の XML 行を挿入します。

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

それを保存します。

上記のリンクで彼らがあなたに伝えていないことは、このエントリがデフォルトのスタイルシートを完全に上書きするということです. レポートをレンダリングする最初の試みは、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;
}

それを保存。

これを保存すると、Reporting Services のこのインスタンスの既存のすべてのレポートが、Chrome や Safari を含むすべてのブラウザーでレンダリングされます。

ご注意ください:

可能性があるだけでなく、reportserver.config がレポート サービスの更新で上書きされる可能性が非常に高いため、<HTMLViewerStyleSheet>SafariChrome</HTMLViewerStyleSheet>時間の経過とともにタグを追加する必要がある場合があります。

これにより、デフォルトのスタイル シートに割り込んで、すでに機能しているものから始めて、他の多くのカスタム変更を行う場所も得られます。また、これはデフォルトのスタイルシートではないため、新しいカスタム CSS ファイルはアップグレードやパッチの際に上書きされません。

于 2013-08-29T04:48:28.253 に答える
4

私の解決策は、以下を追加することでした<script>

Reporting Services\ReportManager\Pages\ Report.aspx

このスクリプトは、表示可能なレポート コンテンツの1を対象とし、複数ページのレポートのページングを含め、レポートが読み込まれるたびに2を設定します。style.overflow:visible

if (window.addEventListener && document.querySelector) window.addEventListener("load", function () {

    // drop out if Sys.Application.add_load is undefined
    if (!window.Sys || !Sys.Application || !Sys.Application.add_load) return;

    // register a function for when report data is loaded
    Sys.Application.add_load(function () {

        // get the report content control
        var n = document.querySelector("[id^=VisibleReportContent]");

        if (n) {

            // get the report content control's parent
            n = n.parentNode;

            if (n) {

                // revert overflow:hidden to "visible"
                n.style.overflow = "visible";

            }
        }

    });
});

1これは、変化する傾向のある生成された ID をターゲットにする必要がないことを意味します。つまりctl31_ctl09ctl31_ctl10ctl32_ctl09、 などです。
2を参照Sys.Application.add_load()

于 2015-01-14T15:49:19.323 に答える
2

Reporting Services の SQL Server 2014 リリースでは、Google Chrome ブラウザーのサポートが追加されていますが、iOS はまだサポートされていません。詳細はこちらをご覧ください。

于 2015-01-06T13:46:25.137 に答える
1

問題はChrome22.0.1229.79にまだ存在します。

YMMVですが、ReportViewerタグから高さを削除するとこの問題が修正されることがわかりました。

この問題はSSASレポートで発生していましたが、SSRSレポートでは発生していませんでした。ページの違いを確認するまで、理由がわかりませんでした(コンサルタントがSSASレポートを作成しました)。彼はReportViewerの高さを60%に設定しており、SSRSレポートは高さを指定していませんでした。

Heightを削除すると、レポートが表示されます。

于 2012-10-03T17:30:50.663 に答える
1

要素 ID をハードコーディングする必要を回避するために、RS サーバー @ [Drive]:\Program Files\Microsoft SQL Server\[Reporting Services Instance]\Reporting Services\ReportManager\js\ReportingServices.jsの ReportingServices.js ファイルを編集しました。 jQuery を取得してページにロードし、オーバーフローが auto に設定されているすべての要素を検索するためのコードを含めます。

ReportingServices.js ファイルの先頭に次のコードを挿入します。

var loadjQuery = function (cb) {
    if (typeof (jQuery) == 'undefined') {
        var scr = document.createElement('script');
        scr.setAttribute('type', 'text/javascript');
        scr.setAttribute('src', 'http://code.jquery.com/jquery-latest.js');

        if (scr.readyState) {
            scr.onreadystatechange = function () {
                if (scr.readyState === 'complete' || scr.readyState === 'loaded') {
                    scr.onreadystatechange = null;
                    if (typeof (cb) === 'function') {
                        args = [].slice.call(arguments, 1);
                        cb.apply(this, args);
                    }
                }
            };
        }
        else {
            scr.onload = function () {
                if (typeof (cb) === 'function') {
                    args = [].slice.call(arguments, 1);
                    cb.apply(this, args);
                }
            };
        }

        var head = document.getElementsByTagName('head')[0];
        head.insertBefore(scr, head.firstChild);
    }
}

その次の行は、もともと JS ファイルにあったものです。

その後、次のコードを追加します

var _rmFixReady = false;
function pageLoad() {
    loadjQuery(function () {
        _rmFixReady = true;
    });
    if (_rmFixReady) {
        var overflowElements = $('div').filter(function () { return $(this).css('overflow') == 'auto'; });
        overflowElements.each(function () {
            $(this).css('overflow', 'visible');
        });
    }
}

RM2012 インスタンスで Chrome 27 と IE 10 を使用してこれをテストしたところ、うまく機能しました。

于 2013-05-23T15:52:15.597 に答える
1

私はこれらのアプローチを試してみましたが、うまくいきましたが、システム管理者はこれらの変更に懐疑的でした.

で高さを 100% に設定する代わりにReportViewer、固定の高さを使用し、Internet Explorer と Chrome のアプリケーションでうまく機能しました。

于 2014-07-23T18:51:48.960 に答える
1

Windows Server 2008 R2 x64上の SSRS 2012の場合、動作するスクリプトは次のとおりです。

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

    if (window.addEventListener) // W3C standard
    {
         window.addEventListener('load', FixSafari, false); // NB **not** 'onload'
    }
    else
        if (window.attachEvent) // Microsoft
        {
            window.attachEvent('onload', FixSafari);
        }
}

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

上記の提案されたバージョンはすべてまったく機能していませんでした。

于 2013-03-12T08:50:07.030 に答える
1

Chrome でレポートを表示することはできませんでした。Microsoft のドキュメントのほとんどはそれをリストしていないので、Chrome が ASP 内の何かを解釈するのに問題があるに違いないと思います。

Reporting Services および Power View のブラウザー サポート を参照してください。

Chrome 11 を実行していますが、あなたと同じ動作が発生します。

于 2011-05-04T14:07:01.243 に答える
1

Chrome でレポートを表示する際にも同じ問題がありました。Google Chrome に拡張機能「SSRS Report Fix」を追加して修正しました。 https://chrome.google.com/webstore/detail/ssrs-report-fix/fjbdfjiheafbioiejbdpalmojkeobk

于 2016-09-28T10:26:56.193 に答える