2016-09-13 6 views
0

ドキュメントDOMに新しい要素を送信するためにWebサービスを試しています。ブラウザは追加された子ノードをレンダリングしません

私はその仕事を行うのに必要な情報を使ってサーバー側でXMLを準備しています。以下のように私のサーバー側のXMLは次のとおりです。

<Root> 
 
<Command>Add 
 
<Data><button id="PB" style="width:600px; height:100px;"/></Data> 
 
</Command> 
 
</Root>

このXMLは、ページを次のようにキャッチされ。 XMLには、コマンドIDが "Add"であることがわかります。これは、データの下にあるノードをページに追加する必要があります。

コードが実行されているとき、ボタンはドキュメントDOM(コード関数onMessageを参照)で正しく作成され表示されますが、レンダリングされません。 ブラウザのデバッガは、ボタンの幅と高さがNullと思われることを伝えます。ブラウザデバッガで属性を編集すると、変更後にボタンがレンダリングされます。 ChromeとIEでこの動作が発生します。

ヒントが必要ですが、実行するために変更する必要があります。解決

<!DOCTYPE html> 
 
<meta charset="utf-8" /> 
 

 
<script language="javascript" type="text/javascript"> 
 

 
var wsUri = "ws://localhost:8002/chat"; 
 
var output; 
 
var websocket; 
 

 
"use strict"; 
 

 
function init() { 
 
    output = document.getElementById("output"); 
 
    testWebSocket(); 
 
} 
 

 
function testWebSocket() { 
 
    websocket = new WebSocket(wsUri); 
 
    websocket.binaryType = "arraybuffer"; 
 
    websocket.onopen = function (evt) { onOpen(evt) }; 
 
    websocket.onclose = function(evt) { onClose(evt) }; 
 
    websocket.onmessage = function(evt) { onMessage(evt) }; 
 
    websocket.onerror = function(evt) { onError(evt) }; 
 
} 
 

 
function onOpen(evt) { 
 
    writeToScreen("CONNECTED"); 
 
} 
 

 
function onClose(evt) { 
 
    writeToScreen("DISCONNECTED"); 
 
} 
 

 
function onMessage(evt) { 
 
    var parser, xmlDoc, NodeCommand, but; 
 

 
    parser = new DOMParser(); 
 
    xmlDoc = parser.parseFromString(evt.data, "text/xml"); 
 

 
    NodeCommand = xmlDoc.getElementsByTagName("Command"); 
 

 
    switch (NodeCommand[0].textContent) { 
 
     case "Add": 
 
      output.appendChild(NodeCommand[0].childNodes[1].childNodes[0]); 
 
      break; 
 
    } 
 
} 
 

 
function onError(evt) { 
 
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); 
 
} 
 

 
function doSend(message) { 
 
    writeToScreen("SENT: " + message); 
 
    websocket.send(message); 
 
} 
 

 
function writeToScreen(message) { 
 
    var pre = document.createElement("p"); 
 
    pre.style.wordWrap = "break-word"; 
 
    pre.innerHTML = message; 
 
    output.appendChild(pre); 
 
} 
 

 
window.addEventListener("load", init, false); 
 

 
</script> 
 

 
<html> 
 

 
<head> 
 
<title>WebSocket Test</title> 
 
</head> 
 

 
<body> 
 
<h2>WebSocket Test</h2> 
 

 
<div id="output"></div> 
 

 
</body> 
 
</html>

答えて

0

これはこの(直感的な)方法ではできません。要素はドキュメント上に作成する必要があります。

関連する問題