web-dev-qa-db-ja.com

SSRS 2008 R2-SSRS 2012-ReportViewer:Safari / Chromeでレポートしますが、Firefox / Internet Explorer 8では正常に動作します...なぜですか?

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

証明書とセキュリティで保護された接続を使用することになっています(現在はHTTPSのみでセットアップされ、HTTPのみでセットアップされています)調整が必要なサーバー側の構成はありますか?誰かが以前のSSRSバージョン(2005)を使用してSafari/Chromeで[〜#〜] any [〜#〜]レポートを表示することに成功しましたか?

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

レポートは、Internet Explorer 8(もちろん)およびFirefox 4.0で正常にレンダリングされます。

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

82
Greg H

究極のソリューション(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がctl32_ctl09を見つけました)。

このソリューションが機能しない場合は、ブラウザのHTMLを見て、スクリプトがoverflow:autoプロパティをoverflowに変更して適切に機能しているかどうかを確認します:visible


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

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

#reportViewer_ctl09 {
  overflow:visible !important;
}

理由

ChromeとSafariは、Internet Explorerに対して異なる方法でoverflow:autoをレンダリングします。

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のデバッグウィンドウを使用して)最終的なHTMLoverflow:autoinoverflow:visibleを手動で変更すると、Chromeに関するレポートが表示されます。

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

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

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

Einarq氏が解決策を提案してくれました こちら

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

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

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

94
Emanuele Greco

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

43
Ryan

これは 既知の問題 です。問題は、divタグのスタイルが「overflow:auto」であり、SafariおよびChrome(Emanuele Grecoの answer =)。RS:ReportViewerHost要素を使用するというEmanueleの提案を活用する方法を知りませんでしたが、JavaScriptを使用して解決しました。

問題

enter image description here

ソリューション

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に適用できるとは思いません。

18
Tim Partridge

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

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

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

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

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

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

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

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

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

保存してください。

それらがdo n'tで上記のリンクであなたに言うことは、このエントリがデフォルトのスタイルシートを完全に上書きするということです。 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ファイルが上書きされることはありません。

7
Gawain

私の場合、問題のDIVは"ctl31_ctl09"であるため、上記の解決策が機能しない場合は、var element = document.getElementById("ctl31_ctl10");var element = document.getElementById("ctl31_ctl09");に変更してください。

4
Jabran Ali

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

Reporting Services\ReportManager\Pages \Report.aspx

スクリプトは、表示可能なレポートコンテンツ親をターゲットにします1 レポートがロードされるたびに_style.overflow:visible_を設定します2 -マルチページレポートのページングを含む。

_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_ctl09_、_ctl31_ctl10_、_ctl32_ctl09_などです。
2 Sys.Application.add_load()を参照してください

4
canon

私にとっては、名前は「ctl32_ctl09」( SQL Server 2012 SP1、MSRS11のSSRS)でした。

2
Alexus1024

私はChromeで F12 そして、私のdivにctl31_ctl09ではなくctl32_ ctl09があったことに気づきました。

これは、- Windows Server 2008 R2 64Bit with SQL Server 2012 用です。スクリプトを追加してからSSRSを再起動し、ブラウザーのキャッシュをクリアします。

// ChromeがSSRSレポートを表示できるように修正

    function pageLoad() {
    var element = document.getElementById("**ctl32**_ctl09");
    if (element)
    {
        element.style.overflow = "visible";
    }
}
2
user2585349

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

2
Frank Goortani

残念ながら、主な答えは、Internet Explorerレポートの浮動(位置絶対)列を破壊します。したがって、私はそれをわずかに変更しました。WebKitを具体的に探しているので、それは好きではありませんが、機能しています:

//SSRS 2012 Chrome fix
function pageLoad() {
    var element = document.getElementById("ctl32_ctl09");
    var isWebKit = !!window.webkitURL;    // Chrome or safari really (WebKit browsers).
    // We don't want to do this fix in Internet Explorer, because it breaks floating columns
    if (element && isWebKit)
    {
        element.style.overflow = "visible";
    }
}
2
archangel76

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

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

私はChrome 11を実行していますが、あなたと同じ動作を経験します。

1
Ryan

問題はChrome 22.0.1229.79にまだ存在します。

[〜#〜] ymmv [〜#〜] 。ただし、ReportViewerタグから高さを削除すると、この問題が修正されることがわかりました。

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

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

1
fujiiface

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

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

1
AsitK

overflow:visible修正の1つの問題は、すべてのブラウザーでフローティングヘッダーが破損していることです。次のスクリプトは、Internet Explorerをそのままにして、インターネットExplorer以外のブラウザーにのみ修正を適用します。これにより、すべての機能がInternet Explorerユーザーに対して保持され、他のブラウザーは引き続きレポートを表示できます。

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

function getInternetExplorerVersion()
// Returns the version of Internet Explorer or a -1
// (indicating the use of another browser).
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat( RegExp.$1 );
    }
    return rv;
}
1
ant_iw3r

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

1
user3328049

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

上記のすべてのバージョンがまったく機能していませんでした。

1
user2160060

要素IDをハードコーディングする必要を回避するために、RSサーバー上のReportingServices.jsファイルを編集しました@ [ドライブ]:\ Program Files\Microsoft SQL Server\[Reporting Servicesインスタンス]\Reporting Services\ReportManager\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でこれをテストしたところ、うまくいきました。

1
Mike Pugh