2012-04-10 57 views
2

好吧,我要瘋了。我試圖實現一個基本的彈出窗口來顯示圖像。如果我的JavaScript代碼在具有onclick屬性的HTML標記中完全指定,則該窗口將正確彈出。如果我的IDENTICAL JavaScript代碼是從HTML文檔開頭的腳本標記或從單獨的js文件中調用的,則鏈接(或我的情況下的圖像)不會在彈出窗口中打開,而會在同一個窗口中打開。 <挫折>Javascript的window.open函數不一致,不會在預期的時候彈出來

這將打開一個彈出:

<a href="test.jpg" onclick="window.open('test.jpg','test_name','width=500,height=500,scrollbars=no'); return false">test_name</a> 


這不打開一個彈出:

function cleanPopup(url, title) { 
window.open(url, title, 'width=500,height=500,scrollbars=no'); 
return false; 
} 

<a href="test.jpg" onclick="return cleanPopup('test.jpg', 'test_name')">test_name</a> 


任何幫助,將不勝感激。 PS:在Chrome和Firefox中測試。

編輯:

我發現我的問題。我最初只是在head標籤中調用js文件。當使用模板工具的多個腳本(在我的案例中爲模板工具箱)創建div元素時,會使div元素層中的某些元素使頭元素中的原始腳本元素對於較深的子元素看起來不可見。

我不知道到底發生了什麼,我沒有時間去探索它。我已經添加了這個編輯功能,以防其他人有類似的問題,並以某種方式在這個線程中絆倒。如果有人瞭解這種現象,並且可以解釋它,請做。

編輯2:

window.open方法的「名稱」參數中不能包含空格的彈出在IE工作。謝謝M $。

+1

它確實爲我打開了一個彈出窗口。檢查你的瀏覽器的JavaScript控制檯,我敢肯定你在某處有語法錯誤。 – 2012-04-10 10:23:44

+0

我在標準文檔模式下,在IE9,IE7-8(來自IE9 DevTools)中對此進行了測試。我在FireFox,Chrome,Safari和Opera的最新版本中對此進行了測試。所有按預期工作。可能你需要展示更完整的例子。 – 2012-04-10 10:46:11

+1

沒有語法錯誤 - 但是如果存在彈出窗口阻止程序,則腳本可能失敗,然後簡單地跟着URL – mplungjan 2012-04-10 11:29:36

回答

3

DEMO HERE

這段代碼是最接近我可以得到的最簡單的。

測試在

  • 的Windows - 外匯,鉻,IE8和Safari
  • iPhone:移動版Safari
  1. 添加目標使鏈接打開一個新窗口或標籤如果允許 - 萬一腳本因任何原因失敗 - 這是一個SIDE-EFFECT,這是有用的,但不是問題的答案。
  2. 如果window.open失敗,返回true也會使點擊跟隨鏈接,希望調用目標 - 請注意,一些瀏覽器不再反應目標。
  3. 除非瀏覽器被設置在一個標籤
<html> 
<head> 
<script type="text/javascript"> 
window.onload=function() { 
document.getElementById('popup').onclick=function() { 
    var w = window.open(this.href, this.target, 
     'width=500,height=500,scrollbars=no'); 
    return (!w); // opens in new window/tab if allowed 
    } 
} 
</script> 
</head> 
<body> 

<a id="popup" href="test.jpg" target="test_name">test_name</a> 
</body> 
</html> 
+1

是的,你是對的。很好的答案。 – Dhruvisha 2012-04-10 12:06:45

+0

在我的代碼中不起作用。打開一個新選項卡,而不是一個彈出窗口。驚人。我在同一瀏覽器窗口中,在不同的選項卡上嘗試您的DEMO,並且它可以工作(打開一個彈出窗口)。從瀏覽器的角度來看源代碼,除了我的href內容,當然還有一堆其他的html,看起來都一樣。在我的代碼庫中有沒有一些HTML可以否定打開彈出窗口的努力?我完全困惑。 – s2cuts 2012-04-11 23:17:35

+0

我需要自己查看並測試您的頁面。如果您不想在此發帖,我的電子郵件位於我的個人資料中。 – mplungjan 2012-04-12 05:46:17

1

使用target = 「_空白」

<a href="whatever" target="_blank"> ... 

從HTML,或

window.open(url, '_blank', options) 

從JavaScript

+0

@mplungjan我認爲這是相關的。如果您不指定'_blank',則可能會覆蓋現有窗口(已使用指定名稱打開) – jlb 2012-04-10 11:21:17

+0

與提問者問題相關的是SORT。不是因爲可能被覆蓋,而是因爲腳本的任何失敗都會使點擊跟隨鏈接。因此,您添加的目標具有不在同一個窗口中打開鏈接的SIDE-EFFECT。 至於你提到的其他原因 - 如果它是一個問題,那麼有可能做var target =「x」+ new Date()。getTime()以獲得一個隨機但可識別的目標。它在漢氏問題上沒有進一步的影響 – mplungjan 2012-04-10 11:37:01

-1

試試這個

function mypopup() 
{ 
    mywindow = window.open("http://www.test.com", "mywindow", "location=1,status=1,scrollbars=1, width=100,height=100"); 
} 
+0

在許多瀏覽器的window.open參數中不允許使用空格。也可以省略1 = – mplungjan 2012-04-10 11:01:51

-2

確保你把你的javascrip在最前面的t代碼塊

<head> 
<script type="text/javascript" language="JavaScript"> 
function cleanPopup(url, title) { 
    window.open(url, title, 'width=500,height=500,scrollbars=no'); 
    return false; 
} 
</script> 

和身體:

<a href="" onclick="cleanPopup('test.jpg','test_name')">test_name</a> 

它只是對我的工作沒有任何問題無論是在Firefox和IE

+0

您需要將false返回給onclick處理程序,以便'onclick =「return cleanPopup(...)」' – mplungjan 2012-04-10 11:03:12

+0

是的,您需要返回false以便默認的事件操作沒有發生(在這種情況下在URL後面)。我錯過了它,因爲糟糕的FF(也是鉻)總是試圖變得太聰明,他們不遵循空白的URL: - /。感謝您指出。 – sowrov 2012-04-10 11:50:32

0

打開所有新視窗的第三參數的高度(和寬度)將強制在一個新的窗口,而不是一個新的選項卡中的開口新窗口的標題隨機

onclick="PopupCenter(this.href,'random','600','700','yes'); return false;" 

和功能:

if(title=='random') 
{ 
title = randomID(); 
} 
相關問題