2015-08-24 12 views
5

के भीतर से मूल बैक बटन ईवेंट कैप्चर करें I वेबव्यू के लिए नया और इसका उपयोग करके ऐप करने का प्रयास कर रहा हूं। मेरे पास एक पॉपअप है जो जावास्क्रिप्ट का उपयोग करके प्रदर्शित होता है। इसे बंद करने के लिए एक करीबी बटन है। बंद बटन के साथ, मैं देशी बैक बटन का उपयोग करना चाहता हूं।वेबव्यू

यही है, यदि उपयोगकर्ता बैक बटन पर क्लिक करता है, तो मेरा पॉपअप बंद होना चाहिए।

मेरा संदेह है, क्या इसे देशी ऐप से किसी भी बदलाव की आवश्यकता है? या वेबव्यूज़ बैक बटन एक्शन को कुछ घटनाओं में परिवर्तित कर देता है जैसे कि वेबपेज समझ सकता है?

+0

आप phonegap का उपयोग कर रहे हैं? आप वास्तव में क्या उपयोग कर रहे हैं? – Buzinas

+0

क्या आप अपडेट कर सकते हैं कि आप @goose पर कहां हैं? –

उत्तर

2

मुझे नहीं पता कि आपके पास HTML5 समर्थन है या नहीं, लेकिन अगर ऐसा है तो इतिहास API से history.pushState और history.onpopstate ठीक वही करेगा जो आप चाहते हैं।

जब पॉपअप प्रदर्शित होता है, तो नए इतिहास प्रविष्टि के ब्राउज़र को सूचित करने के लिए pushState का उपयोग करें, जैसे कि पॉपअप इसके बजाय एक नया पृष्ठ था।

फिर एक ईवेंट श्रोता history.onpopstate पर जोड़ें जो पॉपअप बंद हो जाता है, अगर यह खुला है।

+0

आप सुझाव दे रहे हैं कि मुझे उपर्युक्त घटनाओं को सुनना चाहिए और जब यह आग लगती है तो घनिष्ठ कार्रवाई करें? – Ivin

+0

हां! विस्तृत करने के लिए संपादित! –

1

आप कॉर्डोबा का उपयोग कर रहे हैं, तो यह Android उपकरणों पर वापस बटन को ट्रैक करने के एक घटना प्रदान करता है:

document.addEventListener("backbutton", yourCallbackFunction, false); 

आप इस घटना को ओवरराइड और अपने खुद के व्यवहार को लागू कर सकते हैं। इसके अलावा बैक बटन ईवेंट को ट्रैक करने का कोई तरीका नहीं होना चाहिए।

+0

मैं इस परियोजना के लिए कॉर्डोवा का उपयोग नहीं कर रहा हूं। – Ivin

2

आप कुछ सवाल और उनके समाधानों मिश्रण की कोशिश कर सकते: (बाहर से) वेबव्यू अंदर

  1. अवरोधन एंड्रॉयड

  2. Exec a js function में back button नल घटना

  3. कि will trigger an event में दस्तावेज़

  4. सूची इस घटना के लिए एन document.addEventListener का उपयोग कर और यहां अपने संवाद/चेतावनी

1

क्लिक करना backbutton बंद अपने ViewController जो मोडल से पता चलता बंद कर देगा।

मुझे लगता है कि आप ऐसा नहीं करना चाहते हैं, और बस जावास्क्रिप्ट मोडल बंद करें।

हां आपको अपना मूल कोड बदलना होगा।

On native backbutton click, 

if your modal is open: 
    close the modal 
else: 
    do default backbutton action. 

नीचे एक विस्तृत स्पष्टीकरण है।

On native backbutton click # your native code to intercept the back button 

if your modal is open: 
# there are multiple options here 
# first strategy 
# let javascript inform native side when it opens/closes popup 
# native just needs to check the status he has 
# second strategy 
# native asks javascript if he has a modal open 
# this is a bit tricky because native can't get a return value from javascript 
# native asks javascript to tell native if he has a modal open (native->javascript + javasciprt -> native two function calls) 
# native checks what javascript just said 

    close the modal 
    # this is easy, ask javascript to close it. 

मैं तुम्हें पता है जावास्क्रिप्ट के बीच संवाद के लिए कैसे मान लिया & देशी, http://www.smashingmagazine.com/2013/10/best-of-both-worlds-mixing-html5-native-code/

1

पर एक नज़र नहीं ले करता है, तो आगे सहायता के लिए क्या lifeisfoo ने कहा:

public class WebViewer 
WebView webView; 
@Override 
public void onBackPressed() { 
    if (webView.hasPopUp()) { 
     webView.loadUrl("javascript:closePopUp()"); 
    } else { 
     super.onBackPressed(); 
    } 
}