2013-02-12 3 views
1

먼저이 내용을 읽은 모든 사람에게 사과드립니다. 나는 공정한 수의 JS 문제에 직면 해왔다. 그리고 이것은 내가 이제껏 보아온 가장 다루기 힘들다. 나는 명확한 묘사를하기 위해 최선을 다할 것이다. 그러나 나는 그것을 개정해야 할 수도있다.Firefox에서 자바 스크립트가 잘못로드되었습니다.

나는이 슈가 CRM에서 인라인 프레임 내에서 다음 페이지 로딩 :

<head> 
<link rel="stylesheet" href="style/style.css" /> 
</head> 
<body> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script type="text/javascript" src="js/index_controller.js"></script> 
<table class="form_text" style="width: 100%; height: 100%;" cellpadding="5"> 
    <tr> 
     <td><iframe id="map_frame" 
       style="width: 100%; height: 100%; overflow-y: hidden; border: solid 1px #DDDDDD" 
       scrolling="no" 
       src="map.php?<?php 
        foreach ($_REQUEST as $key => $value) { 
         echo $key . "=" . $value . "&"; 
        }?>"></iframe> 
     </td> 
     ... 
     </td> 
    </tr> 
</table> 
</div> 
<script type="text/javascript"> 
    parent.$("iframe").each(function(iel, el) { 
      if(el.contentWindow === window) { 
       var to_remove = $(el).parent().prev(); 
       $(to_remove).remove(); 
       $(el).css("border", "none"); 
      } 
    }); 
    $(document).ready(function(){ 
     updateMap(); 
    }); 
</script> 
</body> 

그리고 해당 페이지에있는 iframe

, 나는이 있습니다

<head> 
<link rel="stylesheet" href="style/style.css" /> 
<!--[if lte IE 8]> 
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.4/leaflet.ie.css" /> 
<!--[endif]--> 
<link rel="stylesheet" 
href="http://cdn.leafletjs.com/leaflet-0.4/leaflet.css" /> 
<script src="js/jquery-1.9.1.js"></script> 
</head> 
<body> 
<script type="text/javascript" src="../include/DashletContainer/Containers/DCMenu.js"> </script> 
<script type="text/javascript" src="js/arrayList.js"></script> 
<script type="text/javascript" src="js/custom_map_controls.js"></script> 
<div id="map" style="height: 100%"></div> 
<form action="../index.php" method="post" name="DetailView" 
id="formDetailView"> 
<input type="hidden" name="module" value=""> <input type="hidden" 
    name="record" value=""> <input type="hidden" name="return_action"> <input 
    type="hidden" name="return_module"> <input type="hidden" 
    name="return_id"> <input type="hidden" name="module_tab"> <input 
    type="hidden" name="isDuplicate" value="false"> <input type="hidden" 
    name="offset" value="1"> <input type="hidden" name="action" 
    value="EditView"> <input type="hidden" name="sugar_body_only"> <input 
    type="hidden" name="prospect_id" value=""> 
</form> 
<script type="text/javascript" src="js/map_icons.js"></script> 
<script type="text/javascript" src="js/map_controller.js"></script> 
<script src="js/leaflet-0.4.5.js"></script> 
</body> 

leaflet-0.4.5.js 스크립트, 평가를 할 때, 모든 리프 렛 매핑 프레임 워크의 기능에 대한 액세스를 제공하는 L로 알려진 전역 적으로 사용 가능한 객체를 만듭니다. 내 map_controller.js에서, 실제 맵 객체를 생성하기위한 L.Map에 몇 가지 특별한 기능을 추가했습니다. 이것은 Chrome에서 잘 작동하며 브라우저 탭에서 페이지를 직접로드 할 때 Firefox에서 정상적으로 작동합니다. 하지만 인라인 프레임 내부의 SugarCRM 페이지에서 의도 한대로로드하면 JS 콘솔에 "L.insert 함수 이름이 정의되지 않았습니다."라는 오류가 표시됩니다. 전체 SugarCRM 페이지를 다시로드하지 않고 iframe을 새로 고치면 맵이 예상대로 나타납니다. 이 문제를 해결하기 위해 예외를 잡아 내고 페이지가 다시로드 될 때마다 페이지를 강제로로드하려고합니다. 그러나 이것이 왜 처음에 발생 하는지를 알고 싶습니다. L을 사용하는 모든 함수가 $ (document) .ready() 함수 (jQuery를 사용하여)에 포함되어 있고 페이지의 본문 상단에 전단지 스크립트 태그를 넣으려고 했으므로 맵 컨트롤러를 다시 작성했습니다. 그것은로드해야하고, 여전히 행운이 없습니다.

답변

1

부모 페이지에서 $(document).ready을 사용 중입니다.

HTML 구문 분석기가 부모 구문 분석을 마자 마자 실행됩니다. 하지만 iframe 내부에 도달하고 iframe 내부의 다양한 스크립트에 따라로드됩니다. 아직로드되지 않았을 수 있습니다. 기본적으로 최상위 페이지의 HTTP 응답과 하위 프레임의 스크립트에 대한 HTTP 응답 간의 경쟁입니다.

올바른 방법은 onload 또는 DOMContentLoaded (이는 $(document).ready가 후크하는 부분)에서 초기화를 실행하는 것입니다.

0

LABjs 또는 RequireJS과 같은 일종의 종속성 관리를 사용하여 스크립트가 올바른 순서로로드되고 실행되도록해야합니다.

관련 문제