ब्राउज़र में फोनगैप ओपन लिंक


114
<a target="_blank" data-rel="external" href="http://www.kidzout.com">www.kidzout.com</a>

हे विशेषज्ञ मैं फोनगैप 2.9.0 का उपयोग कर रहा हूं और मैं ब्राउज़र में लिंक खोलने के लिए उपरोक्त कोड का उपयोग कर रहा हूं, लेकिन यह एक ही ऐप में इसे खोलता है ...... इसे सफारी ब्राउज़र कैसे खोलें?

यह एक ही ऐप में वेबसाइट को खोलता है और फिर मैं ऐप पर वापस आने में असमर्थ हूं, इसलिए मुझे ऐप को डिलीट करने और इसे इंस्टॉल करने की आवश्यकता है .....


यदि आप _blankबाहरी ब्राउज़र और _selfवेबव्यू के लिए खोलना चाहते हैं , तो कॉर्डोवा 5.1.1 के लिए मेरे 2015 समाधान की जांच करें: stackoverflow.com/a/32227524/82609
सेबस्टियन लॉबर

इसी तरह के प्रश्न के उत्तर भी देखें: stackoverflow.com/a/26176013/1480587 और stackoverflow.com/a/46619378/1480587
पीटर टी।

जवाबों:


225

जैसा कि एक समान प्रश्न में सुझाव दिया गया है , InAppBrowser प्रलेखन के अनुसार, तर्क के window.openसाथ कॉल करने के लिए जावास्क्रिप्ट का उपयोग करें :target_system

<a href="#" onclick="window.open('http://www.kidzout.com', '_system'); return false;">www.kidzout.com</a>

यह काम करना चाहिए, हालांकि एक बेहतर और अधिक लचीला समाधान सभी लिंक की clickघटनाओं को रोकना होगा , और window.openलिंक की विशेषताओं से पढ़े गए तर्कों के साथ कॉल करना होगा।

याद रखें कि आपको काम करने के लिए InAppBrowser प्लगइन स्थापित करना होगा:

cordova plugin add cordova-plugin-inappbrowser

3
हां, मैंने भी कॉर्डोवा 1.7.0 में एक ही लक्ष्य = "_ रिक्त" का उपयोग किया था, लेकिन अब मैं 2.9.0 के साथ काम कर रहा हूं और यह मुझे परेशान कर रहा है, आपके आत्मसम्मान के साथ-साथ काम नहीं किया गया ......:
अहसान अली

6
हाँ, मैंने भी कोशिश की और आपके द्वारा साझा किए गए लिंक का भी अनुसरण किया, आपकी मदद के लिए धन्यवाद, लेकिन समस्या अभी भी है, साइट अभी भी ऐप में खुल रही है ...... :(
ahsan ali

हे अहसान, क्या आप अपने मुद्दे पर विस्तार से बताएंगे? मुझे लगता है कि मुझे भी यही समस्या हो सकती है।
whossname

3
याद रखें कि आपको काम करने के लिए InAppBrowser प्लगइन स्थापित करना होगा, यहाँ निर्देश: cordova.apache.org/docs/en/3.0.0/…
jackocnr

7
मेरे पास एक ही समस्या है .. समाधान काम नहीं कर रहा है :( यह सिर्फ एक नियमित लिंक के रूप में खुलता है (एंड्रॉइड पर)
डैनियल

30

जैसा कि अन्य पोस्ट में कहा गया है, आपके पास विभिन्न प्लेटफार्मों के लिए दो अलग-अलग विकल्प हैं। मैं क्या कर रहा हूँ:

document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {

    // Mock device.platform property if not available
    if (!window.device) {
        window.device = { platform: 'Browser' };
    }

    handleExternalURLs();
}

function handleExternalURLs() {
    // Handle click events for all external URLs
    if (device.platform.toUpperCase() === 'ANDROID') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            navigator.app.loadUrl(url, { openExternal: true });
            e.preventDefault();
        });
    }
    else if (device.platform.toUpperCase() === 'IOS') {
        $(document).on('click', 'a[href^="http"]', function (e) {
            var url = $(this).attr('href');
            window.open(url, '_system');
            e.preventDefault();
        });
    }
    else {
        // Leave standard behaviour
    }
}

इसलिए जैसा कि आप देख सकते हैं कि मैं डिवाइस प्लेटफ़ॉर्म की जांच कर रहा हूं और इस पर निर्भर करता है कि मैं एक अलग विधि का उपयोग कर रहा हूं। मानक ब्राउज़र के मामले में, मैं मानक व्यवहार छोड़ता हूं। अब से समाधान एंड्रॉइड, आईओएस और एक ब्राउज़र पर ठीक काम करेगा, जबकि HTML पेज को बदला नहीं जाएगा, ताकि इसमें मानक एंकर के रूप में प्रतिनिधित्व किए गए URL हो सकते हैं

<a href="http://stackoverflow.com">

समाधान के लिए InAppBrowser और Device plugins की आवश्यकता होती है


बहुत बढ़िया जवाब। बस अगर यह दूसरों के लिए नहीं होता है, तो सुनिश्चित करें कि आपके www / cordova_plugins.js में डिवाइस और अनुपयुक्त इनबॉगर दोनों शामिल हैं। जब मैं प्लगइन्स स्थापित करता हूं, तो यह जेएस और प्लगइन्स को स्टेजिंग फ़ोल्डर में कॉन्फ़िगर करता है और मेरे प्राथमिक काम करने वाले www फ़ोल्डर को नहीं। एक बार जब मैंने कॉन्फिगरेशन और लोकेशन को सॉर्ट किया, तो यह पूरी तरह से काम कर गया।
माइकल बोर्दश

1
यह सबसे अच्छा जवाब है! कृपया याद रखें कि आपके पास InAppBrowser प्लगइन स्थापित नहीं है:$ meteor add cordova:org.apache.cordova.inappbrowser@0.5.4
tixastronauta

अगर कोई स्निपेट में योगदान करना चाहेगा, तो मैंने उसे अपलोड करने के लिए कहा। gist.github.com/redolent/e79722b32a48a536b5ba
सुगन्धित

28
<a onclick="navigator.app.loadUrl('https://google.com/', { openExternal:true });">Link</a>

Android और PG 3.0 के साथ मेरे लिए काम करता है


अभी भी मेरे लिए दोनों एंड्रॉइड 2.3.7 और 4.2.2 पर विफल रहता है।
235 पर उपयोगकर्ता 569825

2
कॉर्डोवा 3.3.0 के साथ एंड्रॉइड 4.4.2 पर मेरे लिए काम करता है। लेकिन iOS 6.1 पर काम नहीं करता है।
मायथैचर

मेरे लिए कॉर्डोवा 3.3.0 काम करता है, धन्यवाद, और आपको यह जानकारी कहां से मिली? दस्तावेज में नहीं मिला।
तोमन शिपही

इसने मेरे लिए कॉर्डोवा 3.4.1 और एंड्रॉइड 4.2 के साथ काम किया। मुझे एक प्लगइन की आवश्यकता नहीं थी। मैं iOS7 पर परीक्षण के बाद वापस रिपोर्ट करूंगा।
pgsandstrom

यह एकमात्र समाधान है, जो मेरे लिए एंड्रॉइड पर काम करता है, धन्यवाद
नीरज चौहान

21

Android और iphone में URL खोलने के 2 अलग-अलग तरीके हैं।

IOS के लिए निम्नलिखित कोड का उपयोग करें।

window.open("http://google.com", '_system');

और Android OS के लिए निम्नलिखित कोड का उपयोग करें।

navigator.app.loadUrl("http://google.com", {openExternal : true});

कॉर्डोवा window.open("http://google.com", '_system')बस के रूप में भी उपयोग कर सकते हैं । आपको इसका उपयोग नहीं करना चाहिए navigator.app.loadUrl, क्योंकि यह market://URL के साथ काम नहीं करेगा : उस स्थिति में, यह आपके ऐप को बंद कर देगा और उसी विंडो में खुलेगा .. जो हमेशा संभव नहीं है।
अगामीनेमस

1
Agamemnus, window.open मेरे फोनगैप 3.6 एप्लिकेशन में एंड्रॉइड पर काम नहीं कर रहा है। मुझे इस जवाब में समाधान का उपयोग करने की आवश्यकता है, इसे काम करने के लिए।
मोलदे

10

अंत में यह पोस्ट मुझे iOS पर मदद करता है: http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/

"CDVwebviewDelegate.m" फ़ाइल खोलें और "shouldStartLoadWithRequest" खोजें, फिर इस कोड को फ़ंक्शन की शुरुआत में जोड़ें:

if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) {
    [[UIApplication sharedApplication] openURL:[request URL]];
    return NO;
}

प्रयोग करते समय navigator.app.loadUrl("http://google.com", {openExternal : true});एंड्रॉइड के लिए ठीक है।

वाया कॉर्डोवा 3.3.0।


यह केवल 3.0.0 में मेरे लिए काम करने वाली चीज है। धन्यवाद!!
रॉकलैन

3.0 में आपको InAppBrowser प्लगइन शामिल करना होगा। हालांकि अजीब लग सकता है।
सीन बैनिस्टर

मैं इसे MainViewController.m में ऊपर की एक परत बदल दूंगा: - (BOOL) webView: (UIWebView *) theWebView shouldStartLoadWithRequest: (NSURLRequest *) अनुरोध नेविगेशन नेविगेशन: (UIWebViewNavigationType) नेविगेशनटाइप {url * अनुरोध URL; अगर ([[url स्कीम] isEqualToString: @ "फ़ाइल"] || [[url स्कीम] isEqualToString: @ "गैप"]) {रिटर्न [सुपर वेबवेज़: theWebView shouldartLoadWithRequest: request नेविगेशनटाइप: नेविगेशनटाइप]; } और {[[अपयोग साझाकरण] खोलना: url]; वापस नहीं; }}
गामाडिल

10

प्रत्येक प्लेटफ़ॉर्म में खोलने के लिए बाहरी लिंक प्राप्त करने के लिए इनमें से कोई भी उत्तर स्पष्ट नहीं है। InAppBrowser डॉक्स के अनुसार :

इंस्टॉल

cordova plugin add cordova-plugin-inappbrowser

खिड़की को अधिलेखित करें। खोलें (वैकल्पिक, लेकिन सरलता के लिए अनुशंसित)

window.open = cordova.InAppBrowser.open;

यदि आप अधिलेखित नहीं करते हैं window.open, तो आप मूल का उपयोग करेंगेwindow.open फ़ंक्शन , और समान परिणाम क्रॉस-प्लेटफ़ॉर्म प्राप्त करने की उम्मीद नहीं कर सकते।

डिफ़ॉल्ट ब्राउज़र में लिंक खोलने के लिए इसका उपयोग करें

window.open(your_href_value, '_system');

ध्यान दें कि InAppBrowser के लिए लक्ष्य (जो कि प्लगइन नाम से पता चलता है कि इसका उपयोग किया जाना है) '_blank'इसके बजाय है '_system'


उपरोक्त चरणों के बिना, मुझे डिफ़ॉल्ट ब्राउज़र ऐप क्रॉस-प्लेटफ़ॉर्म में खोलने के लिए लिंक प्राप्त करने में सक्षम नहीं था।

अतिरिक्त श्रेय

लिंक के लिए यहां एक उदाहरण (लाइव) क्लिक हैंडलर है:

document.addEventListener('click', function (e) {
    if (e.target.tagName === 'A' &&
        e.target.href.match(/^https?:\/\//)) {
        e.preventDefault();
        window.open(e.target.href, '_system');
    }
});

वास्तव में आप विंडो को कहां ओवरराइड करते हैं। वेबसाइट या
कॉर्डोवा

अधिमानतः आपकी जावास्क्रिप्ट फ़ाइल का शीर्ष जिसे आप अपने index.html पेज (आपकी वेबसाइट, यदि वह मदद करता है) में लोड करते हैं
bozdoz

7

यदि आपके पास jQuery है, तो आप इस तरह लिंक पर क्लिक को रोक सकते हैं:

$(document).on('click', 'a', function (event) {
    event.preventDefault();
    window.open($(this).attr('href'), '_system');
    return false;
});

इस तरह से आपको html में लिंक को संशोधित करने की आवश्यकता नहीं है, जो बहुत समय बचा सकता है। मैंने इसे एक प्रतिनिधि का उपयोग करके स्थापित किया है, इसीलिए आप इसे दूसरे ऑब्जेक्ट के रूप में 'ए' टैग के साथ दस्तावेज़ ऑब्जेक्ट से बंधा हुआ देखते हैं। इस तरह से सभी 'ए' टैग को संभाल लिया जाएगा, भले ही उन्हें जोड़ा जाए।

आप अभी भी InAppBrowser प्लग-इन स्थापित करने के लिए है:

cordova plugin add org.apache.cordova.inappbrowser

यह एक अच्छा विचार है जिसका मैं उपयोग करूंगा लेकिन आपको प्रत्यक्ष विंडो का भी ध्यान रखना चाहिए। कॉल (सब कुछ एक लिंक से नहीं होता है)
सेबस्टियन लॉबर

3
window.open('http://www.kidzout.com', '_system');

काम करेगा, लेकिन केवल अगर आपके पास अनुचितब्रोसर प्लगइन स्थापित है। टर्मिनल का उपयोग करने के लिए, अपने प्रोजेक्ट में www फ़ोल्डर में ब्राउज़ करें और टाइप करें:

phonegap plugin add org.apache.cordova.inappbrowser

या

cordova plugin add org.apache.cordova.inappbrowser

फिर यह आपका लिंक ब्राउज़र में खुल जाएगा।


आदेश phonegap local <command>को समाप्त कर दिया गया है। कमान सौंपी गई है phonegap <command>phonegap local <command>जल्द ही कमांड को हटा दिया जाएगा।
अजय सुवालका

मैं अतीत में नहीं जानता, लेकिन आजकल इस प्लगइन को स्थापित करने का अधिकार है cordova plugin add cordova-plugin-inappbrowser
प्लिनियो एफएम

2

कॉर्डोवा 5.0 और अधिक से अधिक प्लगइन के साथ InAppBrowser का नाम कॉर्डोवा प्लगइन रजिस्ट्री में बदल दिया गया है, इसलिए आपको इसका उपयोग करके स्थापित करना चाहिए

cordova plugin add cordova-plugin-inappbrowser --save

फिर उपयोग करें

<a href="#" onclick="window.open('http://www.kidzout.com', '_system');">www.kidzout.com</a>


1

मैं iOS पर फोकस के साथ PhoneGap Build (v3.4.0) का उपयोग कर रहा हूं, और InAppBrowser प्लग-इन को पहचानने के लिए PhoneGap के लिए मेरे config.xml में इस प्रविष्टि की आवश्यकता है।

<gap:plugin name="org.apache.cordova.inappbrowser" />

उसके बाद, window.open (url, target) का उपयोग करके यहां अपेक्षित दस्तावेज के रूप में काम करना चाहिए ।


1
मैं m also using PhoneGap Build (v3.5.x) and added the plugin via the config.xml. But what i get is an InAppBrowser without controls an cannot call the safari browser. Iसिर्फ window.open () का उपयोग कर रहा हूं । कोई सलाह?
१०:३६ पर रानियाँ

यदि यह सही ढंग से सेटअप है, तो window.open को सिर्फ काम करना चाहिए। मेरी स्थिति में, window.open एक और ब्राउज़र url खोल रहा है, और यह ठीक काम करता है। सुनिश्चित करें कि URL ठीक है।
contactmatt

मैंने अभी-अभी फोनगैप बिल्ड के साथ यह कोशिश की है और इसके साथ गलत हो रहा है: "प्लगइन असमर्थित: org.apache.cordova.inappbrowser"
डेविड बॉल

1

मुझे इस मुद्दे का भी सामना करना पड़ा कि लिंक ब्राउज़र पर नहीं खुल रहा है यहाँ चरणों के साथ मेरा फिक्स है:

1: इस कॉर्डोवा प्लगइन को इंस्टॉल करें।

cordova plugin add cordova-plugin-inappbrowser

2: html में खुले लिंक को निम्न की तरह जोड़ें।

<a href="#" onclick="window.open('https://www.google.com/', '_system', 'location=yes');" >Google</a>

3: यह सबसे महत्वपूर्ण कदम है इस वजह से मुझे बहुत समस्या का सामना करना पड़ा: cordova.jsफ़ाइल डाउनलोड करें और इसे wwwफ़ोल्डर में पेस्ट करें । फिर index.htmlफ़ाइल में इसका एक संदर्भ बनाएं ।

<script src="cordova.js"></script>

यह सॉल्यूशन एन्वायरमेंट एंड्रॉइड और आईफोन दोनों के लिए काम करेगा।


-2

ऐशे ही :

<a href="#" onclick="window.open('https://www.nbatou.com', '_system'); return false;">https://www.nbatou.com</a>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.