2009-02-09 14 views
21

मेरे पास एक ऐसा एप्लिकेशन है जो किसी लिंक पर क्लिक करने पर एक नई विंडो खोलता है। यह एक ऐसे पृष्ठ को जन्म देता है जिसमें जावा एप्लेट होता है। मेरी समस्या यह है कि एक ही लिंक पर क्लिक करने से पेज को फिर से लोड किया जाता है, जो जावा एप्लिकेशन को रीसेट करता है। क्या इसे फंसाने का कोई तरीका है? दो समाधान है कि स्वीकार्य होगा हैं:जावास्क्रिप्ट विंडो.ऑपेन केवल तभी यदि विंडो पहले से मौजूद नहीं है

  1. अनुमति दें एकाधिक विंडो क्लिक हैंडलर से खोले जाने के लिए
  2. अनुवर्ती अनुरोधों पर ध्यान न दें, तो खिड़की पहले से ही खुला एक जावास्क्रिप्ट नौसिखिया होने के लिए

क्षमा याचना है - यह है वास्तव में मेरी मुख्य बात नहीं है।

कोड हैंडलर से जुड़ी

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

    var l_params = 'status=1' + 
       ',resizable=1' + 
       ',scrollbars=1' + 
       ',width=' + l_width + 
       ',height=' + l_height + 
       ',left=0' + 
       ',top=0'; 

    winRef = window.open(l_url, l_windowName, l_params); 
    winRef.moveTo(0,0); 
    winRef.resizeTo(l_width, l_height); 
} 

संपादित है:

उत्तर के लिए धन्यवाद - मैं सुझाव संशोधित थोड़ा ताकि मैं एक से अधिक URL समारोह के माध्यम से खोला हो सकता था।

EDIT2: वहाँ Check for a URL open on another window

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]; 
    } 
    alert(winRef); 
    if (winRef == null || winRef.closed) { 
     winRef = window.open(l_url, l_windowName, l_params); 
     winRef.moveTo(0,0); 
     winRef.resizeTo(l_width, l_height); 
     g_urlarray[l_url] = winRef; 
    } 
} 

उत्तर

19

मैं इसे ऐसा करूँगा - basi कैली फ़ंक्शन पर सभी संदर्भित खुले विंडोज़ को स्टोर करें। जब फ़ंक्शन आग लगती है, तो जांचें कि विंडो मौजूद नहीं है या बंद है - तो पॉपअप लॉन्च करें। अन्यथा, उस अनुरोध के लिए मौजूदा पॉपअप विंडो पर ध्यान केंद्रित करें।

function launchApplication(l_url, l_windowName) 
{ 
    if (typeof launchApplication.winRefs == 'undefined') 
    { 
    launchApplication.winRefs = {}; 
    } 
    if (typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed) 
    { 
    var l_width = screen.availWidth; 
    var l_height = screen.availHeight; 

    var l_params = 'status=1' + 
        ',resizable=1' + 
        ',scrollbars=1' + 
        ',width=' + l_width + 
        ',height=' + l_height + 
        ',left=0' + 
        ',top=0'; 

    launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params); 
    launchApplication.winRefs[l_windowName].moveTo(0,0); 
    launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height); 
    } else { 
    launchApplication.winRefs[l_windowName].focus() 
    } 
} 
+0

हां, इस तरह मैं इसे करूँगा - निचला पदचिह्न, अधिक पुन: उपयोग, स्वयं निहित +1 – annakata

+3

+1 बहुत अच्छा काम करता है।एक बात यह है कि, आपके पास मूल चेक में 'winRefs' है लेकिन फिर आप इसे' winrefs' – Rondel

5

में इस कोड का एक और संस्करण आप पृष्ठ नई विंडो खोलता है कि में कुछ इस तरह का उपयोग कर सकते है:

var newWindow = null; 

function launchApplication() 
{ 
    // open the new window only if newWindow is null (not opened yet) 
    // or if it was closed 
    if ((newWindow == null) || (newWindow.closed)) 
    newWindow = window.open(...); 
} 
+1

या बस (winref || winref.closed || winref.document!): अगर (! newWindow || newWindow.closed) –

+0

यह पहले से खोले जाने पर विंडो पर ध्यान केंद्रित नहीं करता है और नए यूआरएल – SCC

2

आप इस तरह की जांच कर सकता :

if(!winref || winref.closed) 
{ 
} 
+0

के साथ कभी भी लोड नहीं होता है, उस फॉर्म में संभावित शून्य सूचक प्रकार की समस्याएं – annakata

+0

@annakata - I * think * कोई शून्य-सूचक समस्या नहीं है, क्योंकि यदि '! Winref' सत्य है, तो IOR -' winref.closed' का दूसरा भाग - कभी भी चेक नहीं किया जाना चाहिए। क्या यह आपके लिए सही लगता है? या मैं गलत गलत हूँ? –

20

आपको 2 परीक्षण करने की आवश्यकता है ... 1 चेक करें कि पॉपअप विंडो परिभाषित की गई है, और 2 जांचें कि यह बंद है या नहीं।

if(typeof(winRef) == 'undefined' || winRef.closed){ 
    //create new 
    winRef = window.open(....); 
} else { 
    //it exists, load new content (if necs.) 
    winRef.location.href = 'your new url'; 
    //give it focus (in case it got burried) 
    winRef.focus(); 
} 
+0

क्रॉस ब्राउज़र – SCC

+0

के रूप में उत्कृष्ट समाधान के रूप में गलत वर्तनी करते हैं, लेकिन यह यूआरएल – SCC

+0

@ user2826057 पर नोट के अनुसार विंडो को फिर से लोड करता है कोड में टिप्पणी - यदि आप सामग्री को फिर से लोड नहीं करना चाहते हैं, तो यह एक ही यूआरएल है, तो आप अलग-अलग होने पर केवल 'अगर (winRef.location.href! = myNewURL) {...}' का परीक्षण कर सकते हैं। – scunliffe

3

कार्य कोड

var newwindow = null; 
function popitup(url) { 
    if ((newwindow == null) || (newwindow.closed)) { 
     newwindow=window.open(url,'Buy','width=950,height=650,scrollbars=yes,resizable=yes'); 
     newwindow.focus(); 
    } else { 
     newwindow.location.href = url; 
     newwindow.focus();  
    } 
} 
संबंधित मुद्दे