views:

38

answers:

1

I am trying to load a bunch of .NET hosted controls into a page dynamically using JavaScript to inject OBJECT tags into the HTML.

My problem is that the objects do not instantiate, only the static object that is visible on page load will appear. Is there any way to get these objects to load?


<h1>
    Visible static</h1>
  <div id="staticObject">
    <object id="Object1" name="dropfolder" classid="http:DropFolder.dll#DropFolder.DropFolder">
      <param name="FolderName" value="Intranet only - Worcs">
      <param name="NodeKey" value="default|Intranet">
      <param name="DropAction" value="">
    </object>
  </div>
  <h2>
    Hidden static</h2>
  <div id="objwrap" style="display: none;">
    <object id="default_Intranet" name="dropfolder" classid="http:DropFolder.dll#DropFolder.DropFolder">
      <param name="FolderName" value="Intranet only - Worcs">
      <param name="NodeKey" value="default|Intranet">
      <param name="DropAction" value="">
    </object>
  </div>
  <input type="button" value="unhide!" onclick="document.getElementById('objwrap').style.display = 'block';" />
  <h2>
    OnLoad target</h2>
  <div id="objectTarget1">
  </div>
  <h2>
    Click target</h2>
  <div id="objectTarget2">
  </div>
  <input type="button" value="inject" onclick="javascript:inject('objectTarget2');" />

  <script type="text/javascript">
    function inject(target) {
      var target = document.getElementById(target);
      target.innerHTML =
      '<object id="default_Intranet" name="dropfolder" classid="http:DropFolder.dll#DropFolder.DropFolder">' +
        '<param name="FolderName" value="Intranet only - Worcs">' +
        '<param name="NodeKey" value="default|Intranet">' +
        '<param name="DropAction" value="">' +
      '</object>';
    };

    inject('objectTarget1');
  </script>

A: 

You could try:

function inject(target) {
  var obj = document.createElement("object");

  obj.id = "default_Intranet";
  obj.name = "dropFolder";
  obj.classid = "http:DropFolder.dll#DropFolder.DropFolder";

  var param1 = document.createElement("param");
  param1.name = "FolderName";
  param1.value = "Intranet only - Worcs";
  obj.appendChild(param1);
  // repeat for other params

  document.getElementById(target).appendChild(obj);
}
Andrew Mcveigh
I think i tried that one at some point, the solution was to inject the object tag and then set the classid once in the DOM.
gum411