2017-03-22 5 views
7

가끔 IE에서 작동하지 않는 맞춤식 날짜 선택기 팝업이 있습니다. Chrome 및 Edge에서 잘 작동합니다. 그래서 여기첫 프레임로드시 IE href = "javascript : customFunction()"이 실행되지 않습니다.

<frameset> 
    <frame>Buttons for next/prev month/year</frame> 
    <frame>This is the actual calendar that gets redrawn when the above buttons are used 
     <a href="javascript:parent.opener.setDate(1);">1</a> //there's a different anchor tag for each day of the month 
    </frame> 
<frameset> 

를이 종류의 이상한 얻는 곳이다 :

코드는 다음과 같은 것을 보인다. 우리는 두 가지 네트워크를 가지고 있습니다. Old는 아마도 문서화되지 않은 많은 글로벌 정책 변화를 겪었을 것이며 새로운 것은 아마도 gov 표준에 가깝습니다. 이것은 이전 네트워크의 모든 브라우저에서 작동하지만 새 네트워크의 IE (11)에서는 작동하지 않습니다. 그래도 가장자리에서 작동합니다. 또한 상단 프레임 버튼을 사용하여 다음/이전 월 또는 "오늘"버튼을 선택하면 하단 프레임 앵커 링크가 모두 정상적으로 작동합니다. 콘솔 오류/경고가 없으며 요청을 나타내는 네트워크 모니터에 오류 코드가 반환되지 않고 클릭 수가 등록되지 않습니다. 내가 customFunction() 안에 중단 점을 넣으면 링크가 작동하지 않을 때 중단되지 않지만 링크가 작동하면 중단됩니다. 나에게 이상한 것 같다

유일한 다른 점은 전체 팝업에 대한 코드가 같은 모양이다 : 나는 확인 했나요

str = "<frameset><frame name='topFrame' " + 
    "src='javascript:parent.opener.drawTop'></frame><frame name='bottomFrame' "+ 
    "src='javascript:parent.opener.drawBottom'><frame</frameset>" 

document.write(str); 

과 하단 프레임을 다시 그려 코드를 할 때 이전/다음/etc 버튼은 첫 번째로드 중에 호출되는 것과 동일한 함수입니다.

그러나 이상하게 보이는 점은 첫 번째로드에서 DOM 관리자가 모든 항목 (상단 프레임, 월별 모든 개별 숫자를 포함하는 하단 프레임 등)을 표시하지만 디버거 (F12 도구) document.write (str);로로드 된 코드를 표시하지 않습니다. 선. 해당 코드를보고 브레이크 포인트를 설정하려면 이전/다음 버튼을 사용하고 DOM과 일치하는 생성 된 HTML이있는 Debugger에 추가 .html 파일이 있어야합니다.

+1

와우, 오랫동안 사용되지 않아서 ''이 (가) 예상되지 않았습니다. 이 중 어느 것도'iframe '과 관련이없는 것 같습니다. – zzzzBov

+4

''str 정의의 끝 부분에 닫는 태그가 잘못되었습니다. 그것은 ''이어야합니다. 귀하의 게시물에 오타가 있거나 실제 코드에 오타가 있는지 여부는 알 수 없습니다. – ConnorsFan

+0

디버깅 할 수있는 링크를 제공 할 수 있습니까? –

답변

4

이 시도 :

1)

<a href="javascript:parent.opener.setDate(1); void(0);">1</a> 

2)

<a href="javascript:function(){parent.opener.setDate(1); return false;}">1</a> 

3)

<a href="#" onclick="javascript:parent.opener.setDate(1); return false;">1</a> 

4) 코드를 확인하십시오. 프레임의 속성이 'sandbox'일 수도 있습니다. 이 속성은 자바 스크립트를 차단할 수 있습니다. 예 : Nutscracker로 큰 제안에서 제외

<iframe src="URL" sandbox> 
+0

샌드 박스 속성이 없습니다. 이상한 점은 setDate() 안에 브레이크 포인트를 설정하면 작동 할 때 작동하지만 작동하지 않으면 작동하지 않는다는 것입니다. 내가 브라우저에게 말할 수있는 한 모든 이벤트는 발생하지 않습니다. 또한 시스템 전반에 걸쳐 사용되는 라이브러리로 구워지기 때문에 코드를 변경하고 싶지 않습니다. 만약 우리가 그것을 바꾸려고한다면 아마 javascript/html 팝업 (uib-datepicker가 떠오른다)으로 전체를 대체하고 프레임을 모두 없앨 것입니다. – tenmiles

+1

@tenmiles 아무 것도 변경할 계획이 없다면 어떻게 문제를 해결하고 싶습니까? – Nutscracker

+0

우리는 두 개의 네트워크를 가지고 있으며 한 곳에서 다른 곳으로 사용자를 이전하고 있습니다. 어떤 이유로이 코드는 위에서 설명한대로 새 네트워크에서는 실행되지 않지만 기존 네트워크에서는 완벽하게 작동합니다. 원인을 확인하면 코드를 변경하지 않고 해결할 수 있습니다. – tenmiles

3

, 나는 또한 document.write를 이벤트 핸들러가 IE에 부착하지에 모호한 문제의 내 몫을 했어. ConnorsFan에 의해 주석 문제는 여기에 원인이 될 수 있습니다,하지만 당신은 시도 할 수 :

document.body.innerHTML = '<frameset><frame name="topFrame" ' + 
'src="javascript:parent.opener.drawTop"></frame><frame name="bottomFrame" '+ 
'src="javascript:parent.opener.drawBottom"><frame></frameset>' 

또한이 코드를 확인하시기 바랍니다 실제로 어쩌면 실제 작업 팝업에 의해 다른 곳에서로드, 호출되고 이전/다음 버튼과 이것은 단지 남은 물건입니다.

+0

내가 본 모든 것은 네비게이션 버튼을 클릭하기 전후의 코드가 같다고 제안합니다. 또한 코드는 탐색 버튼을 사용하지 않고 첫 번째 시도에서 일부 환경에서 작동합니다. 우리는 다양한 정책, 방화벽 등을 검토하는 데 상당한 시간을 투자했으며 아직 범인을 찾지 못했습니다. – tenmiles

0

onclick 함수가 false를 반환하면 기본 브라우저 동작이 취소됩니다.예를 들면 : - 당신을 리디렉션하지 않으므로

<a href='http://www.google.com' onclick='return check()'>check</a> 

<script type='text/javascript'> 

function check() 
{ 
    return false; 
} 

이것은 당신이 onclick 이벤트로 자바 스크립트 기능을 설정하고 당신이있는 페이지에 다시 연결하는 앵커 태그를 가질 수 있음을 의미 클릭 할 때 href 속성이 필요합니다.

+0

이 함수에 대한 명시적인 return 문은 없으며 단지 다른 속성의 값을 설정하고 다른 메서드를 호출합니다. 그러나이 함수는 문제가있을 때 절대로 호출되지 않습니다. 그것이 작동하면 중단 점을 설정할 수 있으며 메서드의 첫 번째 줄에서 중단됩니다. 그러나 작동하지 않으면 중단되지 않습니다. – tenmiles