埋め込みオブジェクトを表示するために失敗したときにどのように私はいくつかのテキストを表示することができますか?
-
22-08-2019 - |
質問
私たちは、このようになりますいくつかのHTMLを持っています:
<form id="MyUserControl" runat="server" method="post">
<script language="javascript" src="javascript.js"></script>
のJavaScriptファイルはこのようなものが含まれています:
document.write('<object id="MyUserControl" ');
document.write('classid="MyUserControl.dll#MyNamespace.MyUserControl"');
document.write('height="611" width="951" >');
document.write('<param name="Parm1" value="' + parm1 + '" />');
document.write('</object>');
基本的に、私はオブジェクトが正しくロードされない場合は、いくつかのテキストを表示したり、所定の位置に待機テキストを残してできるようにしたいと思います。
このすべての理由は、我々はそれがまだ使用中ですが.NETにFoxProのから古いアプリを移行しようとしているということです。これは、かなり大規模なアプリケーションだと私たちは一度に画面を変換しています。私たちは、.NETユーザーコントロールを構築していると、彼らはFoxProの内部のブラウザオブジェクトに表示されます。上記のhtmlとjsのは、私たちは、WebページでのWinFormsユーザーコントロールを埋め込むことができます。
特定のユーザが設定し、当社のアプリケーション・サーバー用のコードアクセスグループを持っていない場合は、、ユーザーコントロールがレンダリングされませんと画面がちょうど何かをロードしようとしているように見える左上隅に小さなアイコンが表示されます。これは、負荷をしたことがないが、私は彼らのアクセスがまっすぐ得るために私達のチームを電子メールで送信するようにユーザーに合図します。
私は、スタンバイとAltキーを使用してみましたが、どちらもテキストを示しました。ユーザーの皆様のすべてはIE7を持っており、これは単なる一時的な解決策である(<6ヶ月)。
解決
あなたはobjectタグ内の任意のインライン要素を置くことができ、それがロードに失敗した場合は、それらがユーザに提示されます。
<object>
This object failed to load,
try to install <a href="http://plugin-site/">here</a>
</object>
奇数IEの動作に関するいくつかのメモを追加したいです。 (IE <8) 障害内容が表示される上記のコードを使用するときは、DOM内のオブジェクトにアクセスできなくなります。だから、空のそれを維持し、負荷の成功を決定するためにいくつかの余分なコードを実行したいことがあります。
<!DOCTYPE html>
<html>
<head>
<title>so-objects</title>
<script type="text/javascript">
function add(text) {
document.body.appendChild(document.createElement("div"))
.appendChild(document.createTextNode(text));
};
function each(o, f, c) {
for (var i=0, l=o.length; i<l; i++) f.call(c, o[i], i, o);
};
onload = function() {
// IE returns null and has mysteriously removed the object from DOM
add("byId = "+ document.getElementById("no-access") );
// IE returns 2 instead of 3
add("byTags = "+ document.getElementsByTagName("object").length );
// verify successful load if the object property is available
each(document.getElementsByTagName("object"), function(node) {
add(node.id +" = "+ !!node.object);
});
};
</script>
<style type="text/css">
object, span { position: absolute; left:-10000px; }
</style>
</head>
<body>
<object id="access">
</object>
<object id="no-access">
<span>failed</span>
</object>
<object id="supported"
classid="clsid:6bf52a52-394a-11d3-b153-00c04f79faa6">
</object>
</body>
</html>
のIE <8 ののための戻り値
byId = null
byTags = 2
access = false
supported = true
のための戻り値の W3C準拠する
byId = [object HTMLObjectElement]
byTags = 3
access = false
no-access = false
supported = false
のあなた自身のために試してみてください 他のヒント
自分の状況に、より具体的な別の答えを追加します。
(ページに適用された、このオブジェクトのインスタンスが1つだけあります場合)これにあなたのjavascriptを変更すると、望ましい結果をもたらすことがあります。
function onchange(o) {
if (o.readyState == 4) {
if (o.object == null) {
alert("UserControl is not installed, please email your administrator.");
// or, toggle display of a message dialog in HTML
//document.getElementById("not-installed").style.display = "block";
}
}
};
document.write('<object id="MyUserControl"');
document.write(' classid="MyUserControl.dll#MyNamespace.MyUserControl"');
document.write(' height="611" width="951" onreadystatechange="onchange(this)">');
document.write(' <param name="Parm1" value="' + parm1 + '" />');
document.write('</object>');