2009-02-09 18 views
5

यह मेरे अंतिम प्रश्न का पालन करता है Open a window if the window does not already exist अनिवार्य रूप से, अब मैं एक पृष्ठ द्वारा खोले गए सभी विंडो संदर्भों की एक सूची रख रहा हूं, और केवल उन्हें खोले जाने की इजाजत देता है अगर वे पहले से खुले नहीं हैं। फिर एक संभावित समस्या ने मुझे मारा - उपयोगकर्ता के लिए मूल विंडो बंद करना और फिर इसे खोलना संभव है, इस प्रकार विंडो संदर्भों की सूची खोना।मैं किसी अन्य विंडो में एक खुले यूआरएल की जांच कैसे कर सकता हूं?

क्या किसी ब्राउज़र में खुली खिड़कियों के माध्यम से लूप करना संभव है, किसी विशेष यूआरएल की जांच करना?

संपादित करें: यहां बहुत उपयोगी टिप्पणियों के बाद (और दूसरे प्रश्न पर), एप्लिकेशन लॉन्चर के लिए अंतिम कोड यहां दिया गया है। अनिवार्य रूप से, यह उपयुक्त नाम के साथ खुली खिड़की का स्थान प्राप्त करने का प्रयास करता है। अगर यह अपवाद (गोपनीयता समस्या के कारण) का कारण बनता है, तो आवेदन को लोड करने का निर्णय लिया जाता है। यदि यह "लगभग: खाली" है, तो यह एक नई विंडो है। यह फ़ायरफ़ॉक्स, आईई 7 और Google क्रोम पर काम करता है। यह गंदा लगता है ...

var g_urlarray = []; 

Array.prototype.has = function(value) { 
    var i; 
    for (var i in this) { 
     if (i === value) { 
      return true; 
     } 
    } 
    return false; 
}; 


function launchApplication(l_url, l_windowName) 
{ 
    var l_width = screen.availWidth; 
    var l_height = screen.availHeight; 
    var winRef; 

    var l_params = 'status=1' + 
     ',resizable=1' + 
     ',scrollbars=1' + 
     ',width=' + l_width + 
     ',height=' + l_height + 
     ',left=0' + 
     ',top=0'; 
    if (g_urlarray.has(l_url)) { 
     winRef = g_urlarray[l_url]; 
    } 
    if (winRef == null || winRef.closed) { 
     winRef = window.open('', l_windowName, l_params); 
     var l_openNew = 0; 
     try { 
      if (winRef.location == 'about:blank') { 
       l_openNew = 1; 
      } 
     } 
     catch (e) { 
      l_openNew = 0; 
     } 
     if (l_openNew === 1) 
     { 
      winRef.location = l_url; 
      winRef.moveTo(0,0); 
      winRef.resizeTo(l_width, l_height); 
     } 
     g_urlarray[l_url] = winRef; 
    } 
} 

उत्तर

0

@annakata (और यहां तक ​​कि यदि आप उन्हें संग्रहीत हैं, तो आप उन्हें अब और बंद करने की अनुमति नहीं होगी)

सत्य नहीं है। यदि आपके पास विंडो का नाम है, तो आप खिड़की के लिंक को फिर से स्थापित करने के लिए window.open का उपयोग कर सकते हैं भले ही सलामी बल्लेबाज बंद हो और फिर से खोला जाए।उदाहरण के लिए:

<script> 
function winOpen(url){ 
    return window.open(url,getWinName(url)); 
} 
function winClose(url){ 
    var win = window.open("",getWinName(url)); 
    win.close(); 
} 
function getWinName(url){ 
    return "win" + url.replace(/[^A-Za-z0-9\-\_]*/g,""); 
} 
</script> 
<a href="#" onclick="winOpen('http://google.com');return false;">Click me first</a>, close and open this window, then 
<a href="#" onclick="winClose('http://google.com');return false;">click me to close the other window</a> 
+0

से पहले काम करने का एक बहुत अच्छा तरीका है यह मेरे लिए एफएफ, क्रोम, ओपेरा या आईई में काम नहीं कर रहा है - क्या यह सिर्फ मुझे है? – annakata

+0

मैं आपको नहीं बता सका। यह आईई में मेरे लिए काम किया। – adam0101

4

नहीं, यह एक सुरक्षा/गोपनीयता समस्या होगी।


के बाद से अन्य लोगों के स्वामित्व/कुकी राज्य भंडारण लाया है: यह केवल काम करता है अगर आप भी एक ही दस्तावेज है जो परिदृश्य में जहाँ उपयोगकर्ता विंडो बंद हो जाता है और उसके बाद पुन: खोलता है इन संदर्भों में खिड़की, यानी खोला हैं वास्तव में खो जाते हैं (और यहां तक ​​कि अगर आप उन्हें संग्रहीत है, तो आप किसी भी अधिक उन्हें बंद करने की अनुमति नहीं होगी)

+0

आपकी टिप्पणी वास्तव में मुझे समाधान के रास्ते पर डाल दिया है - अगर विंडो के स्थान प्राप्त करने की कोशिश एक अपवाद फेंकता है, तो यह लोड किया गया है चाहिए (क्योंकि बारे में: रिक्त एक अपवाद फेंक नहीं है)। बहुत धन्यवाद। –

+0

यह – annakata

2

जावास्क्रिप्ट में, आप केवल वर्तमान विंडो के लिए संदर्भ और किसी भी खिड़कियों कि आप window.open के साथ खुल हासिल कर सकते हैं।

यह देखने के लिए कि उपयोगकर्ता ने विंडो बंद कर दी है, तो आप winRef.closed देख सकते हैं। मुझे यकीन नहीं है कि यह सभी ब्राउज़रों पर अच्छा काम करता है या नहीं, हालांकि।

2

यदि आपने प्रत्येक विंडो को एक अद्वितीय विंडो नाम (window.open का दूसरा तर्क) दिया है, तो विंडो विंडो को फिर से खोलने के लिए उसी विंडो नाम के साथ या तो विंडो बंद हो जाएगी या मौजूदा विंडो का संदर्भ वापस कर देगा एक नई खिड़की खोलने के बिना।

0

आप इसे कुकीज़ लेकिन साथ वास्तव में कर सकता है ... यदि आप मुझसे पूछते हैं, आप यह कर नहीं होगा।

0

सेटअप एक सरणी, और खिड़की संदर्भों के साथ यह भी वृद्धि जब आप उन्हें खोलने ...

var wins = new Array(); 

function openWindow(url) { 
    wins.push(window.open(url)); 
} 

फिर जब आप खिड़कियों की स्थिति की जांच करना चाहते हैं, तो आप इस तरह के माध्यम से उन्हें पाश कर सकते हैं, और हटाने खिड़कियों को खोला नहीं कर रहे हैं ...

function updateWindowArray() { 
    for(var i = 0, l = wins.length; i < l; i++) { 
    if(wins[i] == null || wins[i].closed) 
     arrayRemove(wins, i, i + 1); 
    } 
} 

function arrayRemove(array, from, to) { 
    var rest = array.slice((to || from) + 1 || array.length); 
    array.length = from < 0 ? array.length + from : from; 
    return array.push.apply(array, rest); 
} 

सादर ...

संबंधित मुद्दे

 संबंधित मुद्दे