0

여기 JS 놈이 도움이되기를 바랍니다. 기본적으로이 웹 사이트에서이 설문 조사를 받았습니다. 설문 조사의 각 질문 옆에는 약간의 "?" 도움말 버튼 역할을합니다. 사용을 클릭하면 작은 팝업이 열리고 그 질문을 자세히 설명합니다.Chrome에서 Javascript 버튼이 작동하지 않습니다.

이 버튼은 IE 11에서 작동하지만 크롬에서는 작동하지 않습니다. 먼저 여기에 떨어져 자바 스크립트 코드입니다 : 당신의

<td id="QID_27555"> 
    <a href="javascript:show_sku_help('QID_27555')"> 
     <img border="0" src="/images/help.gif"></a> 
<b>1. Number of Prior Adult Felony Convictions</b> 
<span class="Req1">*</span> 
</td> 

대부분은 아마도이 코드를 찾고 싶어 여기 좋은 측정을위한

<script language="javascript"> 

var sku_help = new Object(); 
function config_sku_help(){ 
    var str = ''; 
    document.write ('<iframe src="/scores_reports/custom/5252/manual_5252.htm" name="iframe_sku_help" id="iframe_sku_help" width=0 height=0></iframe>'); 
    document.write('<DIV ID="div_sku_help_win" style="position:absolute; top:10; left:10; border:2px solid black; background-color:#FFFFCC; z-index:10; display:none; padding:10px; filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=\'#FFFFCC\', EndColorStr=\'#EEEEBB\')"></DIV>'); 
} 

config_sku_help(); 
function render_help_links(){ 
    if (document.readyState != 'complete'){ 
     setTimeout('render_help_links()', 1000); 
     return; 
    } 
    var target; 
    var tables = document.getElementsByTagName('TABLE'); 

    for (var i = 0; i < tables.length; i++){ 
     var table = tables[i]; 
     var td = table.rows[0].cells[0]; 
     if (table.id.substring(0, 5) == 'SECT_'){ 
      target = table.id.replace(/SECT/, 'SID'); 
      add_help_links(table, target); 
     }else{ 
      for (var j = 0; j < table.rows.length; j++){ 
       var row = table.rows[j]; 
       var td = table.rows[j].cells[0]; 
       if (td.id.substring(0, 4) == 'QID_'){ 
        target = td.id; 
        add_help_links(table, target); 
       } 
      } 
     } 
    } 
} 

    function add_help_links(table, target){ 
     for (var i = 0; i < table.rows.length; i++){ 
      var cell = table.rows[i].cells[0]; 
      if (cell.id == target){ 
       cell.innerHTML = '<a href="javascript:show_sku_help(\'' + target + '\')"><img border=0 src=/images/help.gif></a> ' + cell.innerHTML;   
      }else if (cell.className == 'S_HEAD'){ 
       cell.innerHTML = '<a href="javascript:show_sku_help(\'' + target + '\')"><img border=0 src=/images/help.gif></a> ' + cell.innerHTML;   
      } 
     } 
} 

function show_sku_help(target){ 
    var layout_width = 600; //preferred width of help popup 
    target = target.toUpperCase(); 
    sku_help.help_win = document.getElementById('div_sku_help_win'); 
    var win = sku_help.help_win; 
    win.style.width = layout_width; 
    win.innerHTML = ''; 
    win.style.display = 'none'; 
    var iframe = document.frames['iframe_sku_help']; 
    var src_div = iframe.document.getElementById(target); 
    get_special_instructions(iframe, target, win); 
    win.innerHTML += src_div.innerHTML + '<center><a href="javascript: close_sku_help_win()">close</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript: show_all_sku_manual()">manual</a></center>'; 
    win.style.left = (document.body.scrollWidth - layout_width)/2; 
    win.style.display = 'inline'; 
    force_vertical_position(win); 
    function force_vertical_position(win){ 
     for (var i = 1; i < 5; i++){ 
      win.style.top = document.body.scrollTop + (screen.availHeight/2) - (win.scrollHeight/2); 
     } 
    } 
    function get_special_instructions(iframe, target, win){ 
     if (target.indexOf('Q') < 0){return}// quit if is Domain level help 
     divs = iframe.document.getElementsByTagName('DIV'); 
     for (var i = 0; i < divs.length; i++){ 
      if (divs[i].id.substring(0, 3) == 'SI_' && divs[i].id.indexOf(target) > -1){ 
       win.innerHTML += divs[i].innerHTML; 
      } 
     } 
    } 
} 
function close_sku_help_win(){ 
    document.getElementById('div_sku_help_win').innerHTML = ''; 
    document.getElementById('div_sku_help_win').style.display = 'none'; 
} 
function show_all_sku_manual(){ 
    var manual_win = window.open('/scores_reports/custom/5252/manual_5252.htm', 'sku_manual', 'scrollbars=yes') 
    manual_win.focus(); 
} 
setTimeout('render_help_links()', 1000); 
</script> 

그리고, 도움말 버튼 중 하나의 예입니다 머리를 꺼내. 많은 고객들이 이전 버전의 IE에 있기 때문에이 코드는 몇 년 만에 다루어지지 않았습니다.

이제이 문제는 Google 크롬 개발자 콘솔에있는이 오류와 관련이 있다고 생각합니다.

Uncaught TypeError: Cannot read property 'iframe_sku_help' of undefined 

다음

var iframe = document.frames['iframe_sku_help']; 

에 오류가있는 하나되는 코드 줄을 우리를 인도있다. 이 시점에서 나는이 오류가 실제로 무엇을 의미하는지 모르기 때문에 붙어 있습니다. 어떤 도움을 주시면 감사하겠습니다!

감사합니다.

답변

0

내 지식이 많은 최신 브라우저 (현재 HTML/JS 사양의 일부가 아닙니다)에서 지원되지 않습니다.

이 같이 대신 document.getElementsByName보십시오 : 우리가 getElementsByName가 지정된 이름 (모든 요소의 배열을 생산하기 때문에 제로 색인을해야

var iframe = document.getElementsByName('iframe_sku_help')[0]; 

주와 이름 때문에 고유하지 않을 수도 있습니다 단일 요소). 이 경우에는 iframe_sku_help이라는 요소가 하나만 있다고 가정하면 0입니다.

그러나 이것은 이전 버전의 IE에서는 문제가 될 수 있습니다 (getElementsByName in IE7 참조).

var iframe; 
if (document.frames) 
    iframe = document.frames['iframe_sku_help']; 
else 
    iframe = document.getElementsByName('iframe_sku_help')[0]; 

는 또한 일반적으로 getElementsByName에 대한 지원에 대한 걱정이 될 것입니다 : 그것은 백업으로 getElementsByName를 사용하지 않는 경우에 따라서 나는 (이 오래된 IE 브라우저에서와 같이) document.frames의 존재 여부를 테스트하고있다. 문제가있는 것으로 확인되면 document.getElementsByTagName('iframe')을 사용해보고 그 목록을 살펴보세요.

0

내가 아는 한 document.framesIE에서만 작동합니다.

iframes을 모두 얻으려면 크로스 브라우저 방식으로 iframe을 제공 한 다음 window.frames 속성을 사용합니다. 또 다른 옵션은 document.getElementsByTagName을 사용하여 iframe 배열을 만드는 것입니다. 그것에 대해 자세히 알아보십시오 here.

관련 문제