レポート サービスをバージョン 2008 から別のサーバー バージョン 2008 R2 に移行しました。バージョン 2008 では、レポートは Safari で正常に機能します。新しいバージョン 2008 R2 では、レポートがまったく表示されません。パラメータ セクションしか表示されず、レポートは空白です。Chromeでも同じです。Microsoft Safari によると、制限付きの場合はサポートされています。レポートは複雑ではありません。実際、Safari で表示されるかどうかを確認するために行のみを含むレポートを作成しましたが、表示されません。そのレポートも完全に空白です。SSRS レポートを Safari で表示できるようにした人はいますか? ある種の構成設定をいじる必要がありますか?
10 に答える
究極のソリューション (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:visible
F12
私はティムのソリューションが大好きです。簡単で効果的です。
しかし、まだ問題があります: ユーザーがパラメーターを変更するたびに (私のレポートはパラメーターを使用します!)、AJAX が div を更新すると、overflow:autoタグが書き換えられ、スクリプトはそれを変更しません。
このテクニカルノートの詳細は、何が問題なのかを説明しています:
これは、AJAX パネルで構築されたページでは、ページ全体を更新せずに AJAX パネルのみが状態を変更するために発生します。したがって、タグ
OnLoad
に適用したイベントは<body>
、ページが最初に読み込まれたときに 1 回だけ発生します。その後、AJAX パネルを変更しても、これらのイベントはトリガーされなくなります。
ユーザー einarq がこの解決策を提案しました:
もう 1 つのオプションは、関数の名前を pageLoad に変更することです。この名前の関数は、部分的な更新のたびに、ページに存在する場合、asp.net ajax によって自動的に呼び出されます。これを行うと、 body タグから onload 属性を削除することもできます
そのため、ソリューションに示されている改善されたスクリプトを作成しました。
SizeToReportContent="true"
以下に示すように含めるだけです
<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="True"...
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";
}
}
これは既知の問題です。問題は、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には適用できないと思います。
上記のアイデアに基づく私のソリューション。
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 などの他のライブラリを含める必要もありません。
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();
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";
}
}
私はこれを使用しました。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');
});
});
}
});
}
});