2010-12-28 15 views
11

Bir web sitesini düzeltmeye çalışıyorum.html Yeni hedefe bir url açın ve odaklanmak

O <a href="..." target="help"> aracılığıyla yeni pencerede/sekmede bir yardım sayfası (başka çerçeve bu ada sahip)

Bu ilk seferinde yardım için, yeni bir pencere/sekme açarak çalışır açılır. Ancak sonraki tıklamalar için pencere/sekme yüklenir ancak gizlenir.

<script> 
    function OpenAndFocusHelp() { 
     win=window.open('help/1000CH00017.htm','help'); 
     win.focus(); 
    }  
</script> 

<a href="help.html" target="help" 
    onclick="OpenAndFocusHelp()">Help</a> 

Yaramadı:

Bu çalıştı!

+0

Bu nedenle pencere yükleniyor, gösterilmiyor mu? Doğru sayfa yükleniyor mu? Her tarayıcıda aynı davranışı var mı? Sanırım bu bir pencere müdürü endişesi, javascript'ten yapabileceğiniz bir şey değil, ama şimdilik oynadığım için takip ediyorum. – jcolebrand

cevap

3

ben .. bu özellik tarayıcıya özel olduğunu ve yeni sekmeler veya pencereler odaklama için davranışını tanımlayamazsınız düşünüyorum

2

yerine böyle bir kod olabilir:

Sonra
var _arrAllWindows = new Array(); 
function OpenOrFocus(oLink, sTarget) { 
    var oWindow = _arrAllWindows[sTarget]; 
    if (!oWindow || oWindow.closed) { 
     oWindow = window.open(oLink.href, sTarget); 
     _arrAllWindows[sTarget] = oWindow; 
    } 
    oWindow.focus(); 
    return false; 
} 

adlandırmak , böyle bir bağlantı var: Chrome ve IE

<a href="http://www.google.com" onclick="return OpenOrFocus(this, 'help');">Open</a> 

İşleri cezası maalesef Firefox varsayılan olarak kodunda pencereleri "yükseltmek" seçeneğini devre dışı bırakın böylece focus() hiçbir etkisi de vardır Bu tarayıcı - etrafında herhangi bir iş bulamadı.

Test durumda burada mevcuttur: http://jsfiddle.net/yahavbr/eVxJX/

+0

@richard: Hangi tarayıcı? jsfiddle örneğinde de olur mu? –

+0

http://jsfiddle.net/yahavbr/eVxJX/ adresindeki örnek, yukarıda belirtildiği gibi firefox'u seçmemiştir. Tekrar iş başındayken tekrar test edilecektir. –

+0

ie6 ile test edildi ve çalışmıyor. –

7

Modern tarayıcılar window.focus varolan pencere sizi izin vermez gibi görünüyor. Ya da en azından, bu pencere odağını vermez. (IE9 aslında sekmeyi göz kırpacak, ancak diğer tarayıcıların çoğu sadece onu yükleyecek, ancak kullanıcının yeni pencereye dikkat etmesi gerektiğine dair hiçbir belirti vermeyecektir.)

Bu nedenle, kendini gösteren bir çözüm önce pencereyi kapatmaktır. ve sonra hemen yeniden açın. Örneğin, declare the following function için:

window.openOrFocus = function(url, name) { 
    if (!window.popups) 
     window.popups = {}; 
    if (window.popups[name]) 
     window.popups[name].close(); 
    window.popups[name] = window.open(url, name); 
} 

Şimdi, bu gibi HTML yazabilirsiniz:

<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/k3t6x/2/', 'window1')">Window 1</a><br /> 
<a href="javascript:void(0);" onclick="openOrFocus('http://jsfiddle.net/KR6w3/1/', 'window2')">Window 2</a><br /> 

ilk pencereyi kapatır bu yana, güvenilir yeni oluşturulan alt pencere odağı verir.

Bu çözüm aynı zamanda window.popups ad kullanır, bu nedenle popups adında bir işlevi var veya başka bir şekilde onunla çarpıştı varsa javascript numunede bunun kullanımlarını yeniden adlandırın.

Caveat: Bu bir post-back sonra çalışmaz. Bunun nedeni, geçerli sayfadan ayrıldığınızda, artık çocuk pencerelerinin sahibi değildir. Bu nedenle, artık onları kapatamaz. Bununla birlikte, yalnızca target özniteliğinin kullanılmasının olağan (odaklanmayan) davranışına indirgenir.

İncelenen: Firefox 4, Krom 11, IE 9
JsFiddle Demosu: http://jsfiddle.net/aqxBy/7/

1

İşte JavaScript engelli müşterileri için yedek kullanımıyla jQuery ve HTML5 kullanarak bir yolu bu. Her tıklamanın sayfalarını yeniden yükler. Firefox ve Chrome'da test edildi ve çalışıyor.

<script> 
    $(document).ready(function() { 
     $('a[data-popup]').click(function(event) { 
      event.preventDefault(); 
      window.open(this.href, this.dataset['popup'], 'resizable,scrollbars').focus(); 
     }); 
    }); 
</script> 

<a href="https://stackoverflow.com/" target="_blank" data-popup="stackoverflow">Stack Overflow</a> 
<a href="https://superuser.com/" target="_blank" data-popup="superuser">Super User</a> 
<a href="https://serverfault.com/" target="_blank" data-popup="serverfault">Server Fault</a> 
İlgili konular