динамически создавать теги объектов в JavaScript - PullRequest
3 голосов
/ 02 июля 2010

Мне интересно, почему следующий код не создает два моих объекта 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>

Хорошо, когда я исследую дом, проводник объектов показывает элемент, но 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>

1 Ответ

1 голос
/ 02 июля 2010

Вы не должны использовать innerHTML для создания новых элементов. Если вы используете document.createElement, то все должно работать нормально:

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

Edit:

Я только что заметил, что объекты, с которыми вы имеете дело, являются объектами на стороне ASP, которые создаются на сервере, а не на клиенте. В этом случае JavaScript не поможет вам, так как он выполняется на клиенте. Вы можете просмотреть исходный HTML-код в своем браузере, чтобы точно определить, какой код генерируется ASP, и если вы скопируете его в JavaScript, он может работать.

...