【问题标题】:dynamically create object tags in javascript在javascript中动态创建对象标签
【发布时间】:2023-03-14 19:55:01
【问题描述】:

我想知道为什么下面的代码没有创建我的两个 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>

【问题讨论】:

    标签: javascript internet-explorer object-tag


    【解决方案1】:

    您不应该使用innerHTML 创建新元素。如果您使用document.createElement,那么它应该可以正常工作:

    var obj = document.createElement('object');
    // set object properties here
    document.getElementById('inkHolder').appendChild(obj);
    

    编辑:

    我刚刚注意到您正在处理的对象是 ASP 服务器端对象,它们是在服务器上而不是在客户端上实例化的。在这种情况下,JavaScript 不会帮助您,因为它是在客户端上执行的。您可以在浏览器中查看 HTML 源代码以准确了解 ASP 生成的代码,如果您在 JavaScript 中复制这些代码,它可能可以工作。

    【讨论】:

    • 对象是一个windows窗体用户控件,是客户端。这不是最常见的方法,但我们正在使用它接下来我将尝试将它包裹在 iframe 周围,看看是否可行。
    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多