3

次のコードで 2 つの ActiveX オブジェクトが作成されないのはなぜでしょうか。object タグが 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 はアクティブ X コントロールではなく、小さな四角いボックスをレンダリングします。

カサブランカの提案に基づく 2 回目の試みです。あなたの提案に従って、これは機能するはずですが、ここでセキュリティの問題が発生している可能性があると思います。同じ問題。

    <%@ 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>
4

1 に答える 1

1

innerHTMLを使用して新しい要素を作成しないでください。使用すると、正常にdocument.createElement動作するはずです:

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

編集:

あなたが扱っているオブジェクトは、クライアントではなくサーバーでインスタンス化される ASP サーバー側オブジェクトであることに気付きました。この場合、JavaScript はクライアント上で実行されるため役に立ちません。ブラウザーで HTML ソースを見て、ASP によって生成されたコードを正確に確認できます。それを JavaScript で複製すると、動作する可能性があります。

于 2010-07-01T23:08:03.517 に答える