2017-03-22 27 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> 

所以這裏的地方變得有點奇怪。我們有兩個網絡,稱他們爲新老。舊的可能有很多無證的全球政策變化,新的可能接近政府標準。這適用於舊網絡上的任何瀏覽器,但不適用於新網絡上的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)加載的代碼;線。爲了能夠看到代碼並設置斷點,我必須使用prev/next按鈕,然後在調試器中顯示一個額外的.html文件,該文件具有與DOM相匹配的構造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)檢查你的代碼。也許你的框架有屬性'沙箱'。此屬性可以阻止JavaScript。例如:

<iframe src="URL" sandbox> 
+0

不存在沙箱屬性。讓我覺得奇怪的是,如果我在setDate()內部設置了一個斷點,那麼它會在它工作時觸發,但當它不工作時它不會觸發。據我可以告訴瀏覽器只是沒有發射任何事件。此外,我們不希望更改代碼,因爲它已經被燒入我們系統中使用的庫中。如果我們試圖改變它,我們可能會用javascript/html彈出窗口(uib-datepicker想到)來替換整個事物,並完全擺脫框架。 – tenmiles

+1

@tenmiles如果你不打算改變什麼,你想如何解決這個問題? – Nutscracker

+0

我們有兩個網絡,正在將用戶從一個網絡遷移到另一個網絡。出於某種原因,此代碼不按上述方式在新網絡上執行,而是在舊網絡上完美運行。找出原因應該導致一個解決方案,不涉及改變代碼...希望。 – tenmiles

3
從Nutscracker偉大的建議

除此之外,我也有我的文件撰寫與和事件處理程序在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; 
} 

這意味着你可以設置你的JavaScript函數作爲一個onclick事件,只是有錨標記鏈接回你所在的頁面 - 因爲它不會重定向你當你點擊它但需要一個href屬性。

+0

這個函數沒有顯式的return語句,它只是設置其他屬性的值並調用其他方法。但是,如果存在問題,則不會調用此函數。當它工作時,我可以設置一個斷點,它會在方法的第一行中斷開,但是當它不起作用時,它不會中斷。 – tenmiles

相關問題