2010-03-08 6 views
2

dojo.XHRGet을 통해 검색된 XML을 dijit.layout.ContentPane에 추가하려고합니다. Firefox (3.6)에서는 모든 것이 정상적으로 작동하지만 Chrome에서는 특정 ContentPane에서만 '정의되지 않음'상태가됩니다.dojo/dijit ContentPane 설정 내용

내 코드는 다음과 같이 보입니다 : 두 브라우저에서 내가 다시 유효한 Document 개체를 얻을 수 있기 때문에

var cp = dijit.byId("mapDetailsPane"); 
cp.destroyDescendants(); // there are some existing Widgets/content I want to clear 
         // and replace with the new content 

var xhrData = { 
    url : "getsomexml.php", 
    handleAs: "xml", 
    preventCache: true, 
    failOk: true 
}; 

var deferred = new dojo.xhrGet(xhrData); 
deferred.addCallback(function(data) { 
    console.log(data.firstChild); // get a DOM object in both Firebug 
           // and Chrome Dev Tools 
    cp.attr("content",data.firstChild); // get the XML appended to the doc in Firefox, 
             // but "undefined" in Chrome 
}); 

내가 XHRGet가 잘 작동 알고,하지만 내용이 얼마나 차이의 일종있을 것 같습니다 되고있다. 요청에서 반환 데이터를 처리하는 더 좋은 방법이 있습니까? XML이 유효한지 확인하기 위해 이렇게 여기의 일부입니다 내 XML을 볼 수있는 요청이 있었다

... 내가 출력 XML을 실행 한

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg xmlns:svg="http://www.w3.org/2000/svg" 
xmlns="http://www.w3.org/2000/svg" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
version="1.1" width="672" height="1674"> 
<defs> 
    <style type="text/css"> 
    <![CDATA[ ...bunch of CSS... 
    ]]> 
    </style> 
    <marker refX="0" refY="0" orient="auto" id="A00End" style="overflow: visible;"> 
    ...bunch more defs... 
</defs> 
<g id="endpoints"> 
    ...bunch of SVG with a some... 
    <a xlink:href="javascript:gotoLogLine(16423,55);" xlink:type="simple">...more svg...</a> 
</g> 
</svg> 

는 WC3 검사기 물마루. 전에 말했듯이, FireFox 3.6에서 작동합니다. 사파리에서 시도해 보았고 동일한 "정의되지 않은"결과를 얻었 기 때문에 Webkit과 관련이있는 것으로 보입니다.

+0

xml이 어떻게 보이는지 보여 줄 수 있습니까? – Philippe

+0

XML을 편집하도록 편집되었습니다. – Kitson

답변

1

cp.containerNode.appendChild (data.firstChild)가 작동합니까? ContentPane을 임의의 XML 노드를 허용 할 수있는 제네릭 컨테이너로 처리하면 너무 많이 요청할 수 있습니다. HTML을 주입하는 것은 항상 유익한 사례입니다. 그것이 작동하지 않는다고 말하는 것은 아니지만,이 위젯에서 잘 탐색되지 않는 코너 케이스입니다.

+0

파이썬에서 잘 작동하는 cp.containerNode.appendChild()도 시도해 보았습니다.하지만 Webkit에서 문제가있었습니다 ... 기본적으로, 여러분이 지적했듯이, 기본적으로 웹킷과 웹킷입니다. Firefox/Gecko는 관심을 보이지 않지만 다른 문서의 내용은 처리하지 않습니다. 나는 이것을 버렸고 단순히 dojox.gfx로 바꾸고 싶었습니다. – Kitson

1

나는 최근에 발생한 경험이 당신과 같은지 아닌지 잘 모르겠습니다. html-head 섹션에 cheking 사용자 스크립트로로드 된 외부 javascript 파일을 사용하고 있습니다. 이것은 IE에서 오류를 생성하는 코드이지만 Firefox에서는 오류를 생성하지 않습니다.

function loginCheck() 
{ 
var username = dojo.byId("usernameBox").value; 
var password = dojo.byId("passwordBox").value; 
var loginForm = dijit.byId("loginDialog"); 
var mainPage = dijit.byId("entirePage"); 
var menuUrl = ""; 

if(username != 'admin' && username != 'user'){ 
    alert('Incorrect username'); 
} else { 
    if(password != '1234') { 
     alert('Incorrect password'); 
    } else { 
     loginForm.hide(); 
     dojo.style(mainPage.domNode, {visibility:"visible"}); 
     dojo.doc.title = dojo.doc.title + " : Signed in as [" + username + "]"; 

     if(username == 'user'){ 
      menuUrl = "../data/userMenu.json"; 
     } else if(username == 'admin') { 
      menuUrl = "../data/adminMenu.json"; 
     } 

     var treeStore = new dojo.data.ItemFileReadStore({ 
      url : menuUrl 
     }); 

     var treeModel = new dijit.tree.ForestStoreModel({ 
      store : treeStore, 
      query : { 
       "type" : "category" 
      }, 
      childrenAttrs : ["children"] 

     }); 

     var naviTree = new dijit.Tree({ 
      model : treeModel, 
      showRoot : false, 
      autoExpand : true 
     }, "naviPane"); 

     dojo.connect(naviTree, "onClick", function(item){ 
       var targetPage = item.link; 

       var targetPane = dijit.byId("centerPane"); 
       console.log(targetPage); 
       **targetPane.attr('href',targetPage);** 
       console.log("redirect success."); 
     }); 
    } 
} 

** 라인. IE는이 오류를 반환합니다.

웹 페이지 오류 세부

사용자 에이전트 : Mozilla/4.0 (호환; MSIE 8.0; 윈도우 NT 6.1; 삼지창/4.0; SLCC2, .NET> CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729, Media Center PC 6.0, InfoPath.2,> Tablet PC 2.0, .NET4.0C, .NET4.0E, AskTB5.6) 타임 스탬프 : 2010 년 10 월 19 일 화요일 08:24:35 UTC

메시지 : 개체가이 속성 또는 메서드를 지원하지 않습니다 라인 : 49 문자 : 21 코드 : 0 URI : http://localhost:8080/TestESarabun/script/loginCheck.js

Dojo 라이브러리를 추적하고이 코드로 dojo/_base/xhr.js 파일에서 중지했다.

dojo._ioAddQueryToUrl = function (/ * dojo .__ IoCallbackArgs */ioArgs) { // 요약 : io 지연 구성에 의해 발견 된 쿼리 매개 변수를 URL에 추가합니다. // 근본적으로 GET 유형 작업 인 작업에만이 옵션을 사용하십시오. if (ioArgs.query.length) { ioArgs.url + = (ioArgs.url.indexOf ("?") == -1? "": "&") + ioArgs.query; ioArgs.query = null; }
}

내 거친 솔루션은 오류없이 밖으로 다음 내 웹 응용 프로그램 실행 "을 같이 IndexOf"라인을 주석이다. 어쨌든이 행이 어떻게 될지 잘 모르겠습니다.