2013-03-12 7 views
5

यह जांचना संभव है कि उपयोगकर्ता ने लक्ष्य = "_ खाली" के साथ एक HTML लिंक पर क्लिक किया है या नहीं।एंड्रॉइड वेबव्यू: निर्धारित करें <a> लक्ष्य = "_ खाली"

मैं क्या करना चाहता हूं वेबप्यू में मेरे ऐप में एचटीएलएम प्रदर्शित करना है, लेकिन एंड्रॉइड डिफ़ॉल्ट ब्राउज़र में "बाहरी" लिंक शुरू करना है। एक "बाहरी" लिंक मेरे लिए लक्ष्य = "_ खाली" वाला एक लिंक है। अन्य सभी लिंक वेबव्यू में संभाले जाने चाहिए।

उदाहरण के लिए

तो: मेरे WebView में इस तरह एक लिंक पर उपयोगकर्ता क्लिक करता है:

<a href="http://www.google.com" target="_blank">new window</a> 

और फिर मैं एंड्रॉयड ब्राउज़र में दिए गए यूआरएल खोलना चाहते हैं।

मैंने इसे चाहिएऑवर्राइडउर्ल लोडिंग() के साथ कोशिश की, लेकिन इस बिंदु पर मैं निर्धारित नहीं कर सकता, अगर लक्ष्य "_blank" या सामान्य लिंक (लक्ष्य के बिना) था।

मैंने भी सेटअपपोर्ट एकाधिक विन्डोज़ (सत्य) सेट करने की कोशिश की; ऑनक्रेटविंडो(), के साथ संयोजन में, लेकिन इस कॉलबैक में मुझे यूआरएल नहीं मिल सकता है।

मैं नहीं कर सकते एचटीएमएल कि प्रदर्शन का ढंग बदलने, तो मैं addJavascriptInterface वाली JavaScript ब्रिज उपयोग नहीं कर सकते()

मैं और क्या कर सकता है? कोई अन्य विचार?

+0

आखिरकार आपने कैसे ठीक किया? – Sagar

उत्तर

1

आप क्या कर सकते हैं निम्नलिखित: सभी तत्वों पर

  1. दोहराता: (बदसूरत लेकिन काम करेंगे)

    onPageFinished (अंदर

    ), पृष्ठ की तरह कुछ करता है में एक जावास्क्रिप्ट कोड टुकड़ा इंजेक्षन लक्ष्य के साथ = _blank

  2. परिवर्तन बाहरी करने के लिए उन तत्वों के लिए hREF विशेषता: // [मूल href]

यदि साइट jquery का उपयोग करती है तो यह आसान होना चाहिए। यदि नहीं, तो आप मानक डोम जावास्क्रिप्ट का उपयोग कर इसे अभी भी कर सकते हैं।

आपके चाहिएऑवर्राइडउर्ललोडिंग() पर, उन बाहरी: // * लिंक देखें और उन्हें बाहरी रूप से खोलें।

आदेश जावास्क्रिप्ट इंजेक्षन करने के लिए, निम्न करें:

webView.loadUrl("javascript:(function() { PLACE YOUR JS CODE HERE })()"); 
3

मैं सिर्फ अपने आप को इस मुद्दे को हल किया। यहां बताया गया है कि मैंने इसे कैसे तय किया।

mWebView.setWebChromeClient(new WebChromeListener() { 
    @Override 
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) { 
     WebView newWebView = new WebView(view.getContext()); 
     newWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(browserIntent); 
       return true; 
      } 
     }); 
     WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; 
     transport.setWebView(newWebView); 
     resultMsg.sendToTarget(); 
     return true; 
    } 
}); 
+0

यह एक मुद्दा है हालांकि, पहली बार जब आप इस तरह के लिंक को खोलते हैं तो यह ठीक खुलता है, लेकिन अगले क्लिक कुछ भी नहीं करते हैं (अधिकतर समय की)। दो उपकरणों पर इसका परीक्षण किया। यह तब काम करता है जब मैं 'newWebView' को नष्ट करता हूं, यानी 'चाहिएओवर्राइडउर्ल लोडिंग' विधि में, 'हैंडलर.postDelayed (xxx, 200) पर कॉल करें;' जहां' xxx' एक रननेबल है जिसमें आप 'नष्ट()' विधि को कॉल करते हैं 'newWebView'। – jadkik94

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