我们有一些如下所示的 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>');
本质上,如果对象未正确加载,我希望能够显示一些文本或保留备用文本。
所有这一切的原因是我们正在尝试将仍在使用的旧应用程序从 FoxPro 迁移到 .Net。这是一个相当大的应用程序,我们一次转换一个屏幕。我们正在构建 .Net 用户控件,它们显示在 FoxPro 内部的浏览器对象中。上面的html和js允许我们在网页中嵌入winforms用户控件。
如果特定用户没有为我们的应用程序服务器设置代码访问组,则用户控件不会呈现,屏幕只会在左上角显示一个小图标,看起来像是正在尝试加载某些内容。它永远不会加载,但我想提醒用户向我们的团队发送电子邮件,以理顺他们的访问权限。
我尝试使用待机和 alt,但都没有显示文本。我们所有的用户都使用 IE7,这只是一个临时解决方案(< 6 个月)。
最佳答案
您可以将任何内联元素放入对象标记内,如果加载失败,它们将呈现给用户。
<object>
This object failed to load,
try to install <a href="http://plugin-site/">here</a>
</object>
MSDN: OBJECT Element | object 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
关于.net - 当嵌入对象无法显示时如何显示一些文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702764/