我想知道为什么以下代码不会创建我的两个activex对象。当对象标签直接在HTML中时,它工作正常,但对于我的生活,我无法动态创建对象项。这是安全问题还是什么?我发现很难找到关于这个问题的文档。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="InkWebForm._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script language="javascript">
window.onload = function() {
var s = '<OBJECT id="inkImage" classid="InkControls.dll#InkControls.ResizableInk" VIEWASTEXT></OBJECT>';
document.getElementById("inkHolder").innerHTML = s;
};
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<!-- This one gets created -->
<OBJECT id="inkImage2" classid="InkControls.dll#InkControls.ResizableInk" VIEWASTEXT>
</OBJECT>
<!-- this one should get inserted but never gets created -->
<div id="inkHolder"></div>
</div>
</form>
</body>
</html>
当我探索dom时,对象资源管理器确实显示了该项目,但IE渲染了一个小方框而不是activex控件。
这是基于卡萨布兰卡建议的第二次尝试。我认为这里可能存在一个安全问题,根据你的建议,这应该有效,但却没有。同样的问题。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="InkWebForm._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script language="javascript">
window.onload = function() {
var obj = document.createElement('object');
obj.setAttribute('id', 'inkImage');
obj.setAttribute('classid', 'InkControls.dll#InkControls.ResizableInk');
document.getElementById('inkHolder').appendChild(obj);
};
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<OBJECT id="inkImage2" classid="InkControls.dll#InkControls.ResizableInk">
</OBJECT>
<div id="inkHolder"></div>
</div>
</form>
</body>
</html>
答案 0 :(得分:1)
您不应该使用innerHTML
来创建新元素。如果你使用document.createElement
那么它应该可以正常工作:
var obj = document.createElement('object');
// set object properties here
document.getElementById('inkHolder').appendChild(obj);
修改强>
我刚刚注意到您正在处理的对象是ASP服务器端对象,它们在服务器上而不是在客户端上实例化。在这种情况下,JavaScript将无法帮助您,因为它在客户端上执行。您可以在浏览器中查看HTML源代码,以确切了解ASP生成的代码,如果您在JavaScript中复制该代码,则可能工作。