ফোনগ্যাপ: ডেস্কটপ ব্রাউজারে চলমান কিনা তা সনাক্ত করুন


118

আমি একটি ওয়েব অ্যাপ্লিকেশন বিকাশ করছি যা ফোনগ্যাপ ব্যবহার করে: একটি মোবাইল সংস্করণ তৈরি করুন এবং 'ডেস্কটপ' এবং মোবাইল সংস্করণগুলির জন্য একটি একক কোডবেস পেতে চাই। আমি ফোনগ্যাপ কলগুলি কাজ করে কিনা তা সনাক্ত করতে সক্ষম হতে চাই (যেমন, কোনও মোবাইল ডিভাইসের ব্যবহারকারী যা ফোনগ্যাপ সমর্থন করবে)।

আমি অনুসন্ধান করেছি এবং বিশ্বাস করতে পারি না এটি করার কোনও সহজ উপায় নেই। অনেকে পরামর্শ দিয়েছেন;

কোনটিই কাজ করে না, যদি না আপনি অ্যাপ্লিকেশনটির ডেস্কটপ সংস্করণ থেকে ফোনগ্যাপ জাভাস্ক্রিপ্ট ফাইলটি সরিয়ে না ফেলে, যা একটি কোডবেস থাকার আমার লক্ষ্যকে পরাস্ত করে।

এখনও অবধি আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল ব্রাউজার / ব্যবহারকারী এজেন্ট স্নিফিং, তবে এটি কমপক্ষে বলা শক্ত নয়। আরও ভাল সমাধান স্বাগত!

সম্পাদনা: একটি সামান্য উত্তম সমাধান হ'ল কিছুটা সময়সীমা পেরিয়ে যাওয়ার পরে ফোনগ্যাপ ফাংশনটি কল করার চেষ্টা করা - যদি এটি কাজ না করে তবে ধরে নিন যে ব্যবহারকারী কোনও ডেস্কটপ ওয়েব ব্রাউজারে আছেন।


যেহেতু আপনি বিল্ড ব্যবহার করছেন, নীচে @ বিটি'র উত্তর দেখুন: stackoverflow.com/a/18478002/241244 । দেখে মনে হচ্ছে এটি গ্রহণযোগ্য এবং শীর্ষ-ভোট প্রাপ্ত উত্তরের চেয়ে ভাল হতে পারে।

সুস্পষ্ট বিল্ড-টাইম কনফিগারেশনের পক্ষে আমি রান-টাইম সনাক্তকরণ এড়াচ্ছি কারণ এটি 100% কার্যকর। আমি কেবলমাত্র আমার ইন্ডেক্স.জেড টেমপ্লেটিতে {আইফোনগ্যাপ: সত্য} এর মতো একটি স্থানীয় ভেরি পাস করি, তারপরে টেমপ্লেটে আমি শর্তসাপেক্ষে ফোনগ্যাপ.জেএস স্ক্রিপ্টটি অন্তর্ভুক্ত করতে পারি এবং আমি চাই সমস্ত ফোনগ্যাপ নির্দিষ্ট থিম সম্পাদন করতে পারি।
জেসি হাটাবোগ

উত্তর:


115

আমি এই কোডটি ব্যবহার করি:

if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|IEMobile)/)) {
  document.addEventListener("deviceready", onDeviceReady, false);
} else {
  onDeviceReady(); //this is the browser
}

হালনাগাদ

ব্রাউজারে ফোনগ্যাপ চলছে কিনা তা সনাক্ত করার জন্য আরও অনেকগুলি উপায় রয়েছে, এখানে আরও দুর্দান্ত বিকল্প রয়েছে:

var app = document.URL.indexOf( 'http://' ) === -1 && document.URL.indexOf( 'https://' ) === -1;
if ( app ) {
    // PhoneGap application
} else {
    // Web page
}  

যেমনটি এখানে দেখা গেছে: একটি মোবাইল ব্রাউজার বা ফোনগ্যাপ অ্যাপ্লিকেশনটির মধ্যে সনাক্ত করুন


এর জন্য ধন্যবাদ - অন্যান্য ব্যক্তিরা কী পরামর্শ দিয়েছেন তা দেখার জন্য দীর্ঘ সময় অপেক্ষা করার পরেও এটি সর্বোত্তম সমাধান বলে মনে হয়। চিয়ার্স।
aaronsnoswell

35
এটি সঠিক নয়, কারণ আমি যদি ডিভাইসের ব্রাউজে একই পৃষ্ঠাটি খুলি তবে অন ডিভাইস রেডি () কখনও কল করবে না। এছাড়াও আমি ব্রাউজারে ইউজারএজেন্ট পরিবর্তন করব (ডিবাগ উদ্দেশ্যে), অন ডিভাইস রেডি () কখনও কল করবে না।
স্লাভিক মেল্টসার

3
আপনি কী বলছেন তা নিশ্চিত নন - তবে মনে হচ্ছে আপনি বোঝাচ্ছেন যে এটি ফোনের ব্রাউজারটি ব্যবহার করতে সমস্যা সৃষ্টি করবে ... এটি আপনার ফোন নয় ডেস্কটপ ব্রাউজারে পরীক্ষা করার সমাধান।
সিরমডগ

7
আপনি যখন ডিভাইস ব্রাউজারে অ্যাপ্লিকেশনটি খোলেন তখন এটি সাহায্য করবে না। আরও ভাল সমাধান: উইন্ডো ক্রর্ডোভা পরীক্ষা করুন। আইফোন সিমুলেটর (ব্রাউজার) বা একটি অ্যান্ড্রয়েড ডিভাইসে (ব্রাউজারে) পরীক্ষার ক্ষেত্রেও ফোনগ্যাপ সনাক্ত করা উচিত। এটাই আমার বিকাশ। তবে জিনিসগুলি সম্পন্ন করার অনেক সম্ভাবনা রয়েছে। ;-) আপনার সমাধান পোস্ট করার জন্য THX!
মারিও

আমি বিভ্রান্ত, উইন্ডোজ ফোনের মতো অন্যান্য প্ল্যাটফর্মের কী হবে? তাদের কি এমন একটি ব্যবহারকারী এজেন্ট রয়েছে যা সেই নিয়মিত অভিব্যক্তির সাথে মেলে? একটি দ্রুত গুগল অনুসন্ধান বোঝায় না: madskristensen.net/post/Windows-Phone-7-user-agents.aspx
mooreds

49

আমি একটি পোস্ট লিখেছি কিছুদিন আগে এ সম্পর্কে । এটি আপনি খুঁজে পেতে পারেন এমন সেরা সমাধান (যতক্ষণ না ফোনগ্যাপ কিছু ছেড়ে দেবে, সম্ভবত বা না পারে), এটি সংক্ষিপ্ত, সহজ এবং নিখুঁত (আমি এটি প্রতিটি সম্ভাব্য উপায়ে এবং প্ল্যাটফর্মে দেখেছি)।

এই ফাংশনটি 98% ক্ষেত্রে কাজ করবে।

/**
 * Determine whether the file loaded from PhoneGap or not
 */
function isPhoneGap() {
    return (window.cordova || window.PhoneGap || window.phonegap) 
    && /^file:\/{3}[^\/]/i.test(window.location.href) 
    && /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);
}

if ( isPhoneGap() ) {
    alert("Running on PhoneGap!");
} else {
    alert("Not running on PhoneGap!");
}

অন্যান্য 2% কেস সম্পন্ন করতে, এই পদক্ষেপগুলি অনুসরণ করুন (এতে নেটিভ কোডে সামান্য পরিবর্তন জড়িত):

উত্সটি সহ __phonegap_index.html নামে একটি ফাইল তৈরি করুন :

<!-- __phonegap_index.html -->
<script type="text/javascript">
    function isPhoneGap() {
        //the function's content is as described above
    }

    //ensure the 98% that this file is called from PhoneGap.
    //in case somebody accessed this file directly from the browser.
    if ( isPhoneGap() )
        localStorage.setItem("isPhoneGap","1");

    //and redirect to the main site file.
    window.location = "index.html";
</script>

এখন, নেটিভ উপর কেবল প্রারম্ভিক পৃষ্ঠা থেকে পরিবর্তন index.html করার __phonegap_index.html আপনার সব PhoneGap প্ল্যাটফর্মের উপর। ধরা যাক আমার প্রকল্পের উদাহরণ উদাহরণস্বরূপ , আপনার যে ফাইলগুলি পরিবর্তন করতে হবে সেগুলি হ'ল (ফোনগ্যাপ সংস্করণ ২.২.০ হিসাবে):

  • আইওএস -CordovaLibApp/AppDelegate.m
  • অ্যান্ড্রয়েড -src/org/apache/cordova/example/cordovaExample.java
  • উইন্ডোজ 8 -example/package.appxmanifest
  • ব্ল্যাকবেরি -www/config.xml
  • WebOS -framework/appinfo.json
  • বড় - src/WebForm.cpp(লাইন 56)
  • উইন্ডো ফোন 7 - কোথায় নেই (এখনও কেউ এই প্ল্যাটফর্মে বিকাশ করছে ?!)

অবশেষে, আপনি এটি আপনার সাইটে যে কোনও জায়গায় ব্যবহার করতে পারেন, যদি এটি ফোনগ্যাপে চলছে বা না:

if ( localStorage.getItem("isPhoneGap") ) {
    alert("Running on PhoneGap!");
} else {
    alert("Not running on PhoneGap!");
}

আশা করি এটা সাহায্য করবে. :-)


4
এই উত্তরটি সবচেয়ে ভাল!
blong824

3
হ্যাঁ এটি কাজ করে তবে কিছু সময় কোডের পরবর্তী অংশটি সত্য হয় না /^file:\/{3}[^\/]/i.test(window.location.href)তবে আমরা ফোনগ্যাপ ব্যবহার করি, উদাহরণস্বরূপ, অন্য পৃষ্ঠা থেকে সূচিপত্র HTML লোড করার সময় কনফিগারেশনএক্সএমএমএল কিছু<content src="http://10.100.1.147/" />
ভুডডু

3
(cordova || PhoneGap || phonegap) যদি এই ভেরিয়েবলগুলির কোনও সংজ্ঞায়িত না করা হয় তবে এক্সপ্রেশনটি একটি রেফারেন্সআরর ফেলে দেবে। আপনার সাথে পরীক্ষা করা উচিত typeof cordova !== undefined, তাই না?
rojobuffalo

1
@ আরব্লেকলে আপনি ঠিক বলেছেন আমি প্রথম লাইনটিতে স্যুইচ করেছি:return ( typeof cordova !== undefined || typeof PhoneGap !== undefined || typeof phonegap !== undefined )
ইথানপিল

1
@রোজুফালো: দেখে মনে হচ্ছে উত্তরটি পরে পরিবর্তিত হয়েছে, এটি আবার প্রত্যাশার মতো কাজ করেছে ( যেমন উপসর্গের ReferenceErrorকারণে এটি আর ফেলে দেয় না window)। ভেবেছি আমি এটিকে নির্দেশ করব, যেহেতু এটি আসলে মন্তব্য শৃঙ্খলাটিকে পুরানো (এবং এইভাবে ভুল) করে।
প্রিয়দু নিমরে

27

আমি জানি এটির কিছুক্ষণ আগে উত্তর দেওয়া হয়েছিল কিন্তু "ফোনগ্যাপ.ভ্যাভলভেট" এর আর অস্তিত্ব নেই। আপনার ব্যবহার করা উচিত:

if (window.PhoneGap) {
  //do stuff
}

বা 1.7 সাল থেকে, পছন্দ করুন:

if (window.cordova) {
  //do stuff
}

সম্পাদনা 2019: মন্তব্যগুলিতে যেমন বলা হয়েছে, এটি কেবল তখনই কাজ করে যদি আপনি আপনার ডেস্কটপ ব্রাউজার বিল্ডে কর্ডোভা লিব অন্তর্ভুক্ত না করেন। এবং অবশ্যই আপনার লক্ষ্যমাত্রার প্রতিটি ডিভাইসের জন্য কেবল কঠোর ন্যূনতম জাভাস্ক্রিপ্ট / এইচটিএমএল / সিএসএস ফাইল অন্তর্ভুক্ত করা একটি ভাল অনুশীলন is


18
এটি সত্য নয়, কারণ উইন্ডো।ফোনগ্যাপ বা উইন্ডো.কর্ডোভা সবসময় সংজ্ঞায়িত হবে যদি আপনি স্ক্রিপ্ট কর্ডোভা-এক্সএক্সএক্সএক্সজেস অন্তর্ভুক্ত করেন তবে তা ব্রাউজারে লোড হওয়া সত্ত্বেও।
স্লাভিক মেল্টসার

আপনি কি আমার সাথে উদাহরণস্বরূপ সাহায্য করতে পারেন the সূচিপত্র HTML লোড করার জন্য আমি যা করছি তা হ'ল আমি আমার স্থানীয় সার্ভারে www ফোল্ডারের অধীনে সমস্ত ফাইল আপলোড করেছি, আমি ইনডেক্স html লোড করছি ut তবে ডিভাইসটি প্রস্তুত রয়েছে on বরখাস্ত করা হয় না।
নাসিফ

5
এটি এখন সঠিক উত্তর বলে মনে হচ্ছে (কমপক্ষে কর্ডোভা ৩.৪ সহ)। কর্ডোভা.জেএস এখন একটি সহজ <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট" src = "কর্ডোভা.জেএস"> </script> দিয়ে প্রয়োগ করা হয়েছে বলে অন্য সমস্ত পদ্ধতি কেবল সময়ের অপচয়। আপনি প্রকৃত ফাইলটির দিকে নির্দেশ করেন না তাই ব্রাউজারে চলার সময় এটি লোড হয় না। এটি কেবলমাত্র একটি মোবাইল ডিভাইসে চলছে কর্ডোভা বিল্ডে।
মাইকেল অরিল

দেখে মনে হচ্ছে এটি ফোনগ্যাপ বিল্ড ব্যবহার করে বিশেষত ভাল কাজ করবে।

4
@ স্লাভিকমে কর্ডোভা স্ক্রিপ্টটি নন-কর্ডোভা বিল্ডগুলিতে অন্তর্ভুক্ত করবেন না।
জ্যাকসন

21

আমরা কর্ডোভা / ফোনগ্যাপ অ্যাপ্লিকেশনটিতে আছি কিনা তা আমাদের কাছে সবচেয়ে নির্ভরযোগ্য উপায় বলে সনাক্ত কর্ডোভা অ্যাপ্লিকেশনটির ব্যবহারকারী এজেন্টকে এই কনফিগার অ্যাপেন্ডুসারএজেন্ট ব্যবহার করে সংশোধন করা

ইন config.xmlঅ্যাড:

<preference name="AppendUserAgent" value="Cordova" />

তারপরে কল করুন:

var isCordova = navigator.userAgent.match(/Cordova/i))

কেন?

  1. window.cordovaএবং document.addEventListener('deviceready', function(){});রেসিং শর্ত সাপেক্ষে
  2. navigator.standalone<content src="index.html" />ওয়েবসাইট যখন কাজ করে না (যেমন: <content src="https://www.example.com/index.html" />বা কর্ডোভা-প্লাগ-ইন-রিমোট-ইনজেকশন সহ )
  3. এটি সত্যিকারের ব্রাউজার কিনা তা অনুমান করার জন্য ব্যবহারকারী এজেন্টদের শ্বেত তালিকাতে চেষ্টা করা খুব জটিল। অ্যান্ড্রয়েড ব্রাউজারগুলি প্রায়শই কাস্টম ওয়েবভিউ হয়।

2
এবং আমরা এমনকি অ্যাপ্লিকেশন সংস্করণ যোগ করতে পারেন! (আদর্শগতভাবে কিছু স্বয়ংক্রিয় সংস্করণ দ্বিখার যুক্তি সহ) প্রাক্তন; Cordova AppName/v0.0.1<3 এইভাবে, আপনি এটি কোনওভাবে ট্র্যাকিংয়ের জন্যও ব্যবহার করতে পারেন (তবে মনে রাখবেন যে যে কেউ এর ব্যবহারকারীর পরিবর্তন করতে পারে তাই সুরক্ষার সমালোচনামূলক যাচাইয়ের জন্য এটির উপর নির্ভর করবেন না)
গ্যাবলেউক্স

এটি সবচেয়ে বুদ্ধিমান পদ্ধতি বলে মনে হচ্ছে। দ্বিতীয় রানার আপটি নথির ইউআরএলটিতে http: // বা https: // এর অনুপস্থিতির জন্য পরীক্ষা করছে বলে মনে হচ্ছে তবে আমি সেই সম্ভাব্য পরিস্থিতিগুলি কল্পনা করতে পারি যেখানে এটি কার্যকর হবে না।
জেডি স্মিথ

14

আমি মনে করি এটি সবচেয়ে সহজ: var isPhoneGap = (location.protocol == "file:")

সম্পাদনা কিছু লোকের জন্য যা কাজ করে না। তারপরে আপনি চেষ্টা করতে পারেন (পরীক্ষা করেননি)

var isPhoneGap = ! /^http/.test(location.protocol);

1
আমি ভেবেছিলাম ফোনগ্যাপ এটির অন-ডিভাইস ফাইলগুলির জন্য একটি অভ্যন্তরীণ সার্ভার চালায়?
aaronsnoswell

আমি এটা পছন্দ করি. লোকালহোস্টে বিকাশ করার সময় এটিই সেরা সমাধান। (অনেক চেষ্টা করার পরেও, আমি আশা করি এটি সব পরিস্থিতিতে কাজ করে, আশা করি।) Thx!
মারিও

1
আমি যখন রিমোট ফাইলটি পরীক্ষা করি তখন এটি
রিপল

ডাব্লুপি 8 তেও কাজ করে না, প্রোটোকলটি হল "এক্স-ডাব্লুএমএপ 0:"। ভবিষ্যতে অন্যান্য "প্রোটোকল" কী ব্যবহৃত হবে তা নির্দিষ্ট করে জানতে পারি না।
অ্যাড্রিয়ান

হ্যাঁ, আপনি এছাড়াও --try পারেvar isPhoneGap = ! /^http/.test(document.location.protocol)
ইউভাল

8

এটি আমার পক্ষে কাজ করে (1.7.0 চলছে)

if (window.device) {
  // Running on PhoneGap
}

ডেস্কটপ ক্রোম এবং সাফারি পরীক্ষিত।


3
এটি 'ডিভাইসডিয়ার' ইভেন্টের জন্য বাধ্যতার মতো প্রায়। উইন্ডো.ডভাইসটি সংজ্ঞায়িত না করা থাকলে, ফোনগ্যাপ / কর্ডোভা লোডিংয়ে ধীরগতিতে বা ইভেন্টটি কখনই আগুনের দিকে যাচ্ছে না তা আপনি বলতে পারবেন না।
মিনিট

8
"ডিভাইস রেডি" ইভেন্টটি ট্রিগার হওয়ার আগে উইন্ডো ডিভাইস সংজ্ঞায়িত করা হয় না।
স্লাভিক মেল্টসার

2
এবং প্রার্থনা করুন যে অন্য কোনও প্রোগ্রামার "ডিভাইস" নামে একটি নতুন গ্লোবাল ভার সংজ্ঞায়িত করার খুশি ধারণা না পেয়ে থাকেন।
মিস্টার স্মিথ

7

মূল পোস্টারের মতো, আমি ফোনগ্যাপ বিল্ড পরিষেবাটি ব্যবহার করছি। দুই দিন এবং প্রায় 50 টি পরীক্ষা তৈরির পরে, আমি একটি মার্জিত সমাধান নিয়ে এসেছি যা আমার পক্ষে দুর্দান্ত কাজ করে।

আমি ইউএ স্নিফিং ব্যবহার করতে পারিনি কারণ আমি মোবাইল ব্রাউজারগুলিতে পরীক্ষা করতে এবং চালাতে চেয়েছিলাম। আমি মূলত কোবারবয়ের বেশ কার্যকরী কৌশলতে স্থির হয়েছি। এটি আমার পক্ষে কার্যকর হয়নি কারণ ব্রাউজার বিকাশের জন্য "howPatientAreWe: 10000" বিলম্ব / সময়সীমা খুব বেশি উপদ্রব ছিল। এবং এটিকে যে কোনও নিম্নতর সেট করা মাঝে মাঝে অ্যাপ / ডিভাইস মোডে পরীক্ষায় ব্যর্থ হয়। আরও একটি উপায় থাকতে হয়েছিল ...

ফোনগ্যাপ বিল্ড সেবার জন্য phonegap.jsআপনার অ্যাপের ফাইলগুলিকে পরিষেবাতে জমা দেওয়ার আগে ফাইলটি আপনার কোড সংগ্রহস্থান থেকে বাদ দেওয়া দরকার । সুতরাং ব্রাউজার বনাম অ্যাপে চলছে কিনা তা নির্ধারণ করার জন্য আমি এর অস্তিত্বের জন্য পরীক্ষা করতে সক্ষম হয়েছি।

অন্য একটি সতর্কবাণী, আমি jQueryMobile ব্যবহার করছি, তাই আমি কোনও কাস্টম স্ক্রিপ্টিং শুরু করার আগে জিকিউএম এবং ফোনগ্যাপ উভয়ই শুরু করতে হয়েছিল। নীচের কোডটি অ্যাপ্লিকেশনটির জন্য আমার কাস্টম index.js ফাইলের শুরুতে স্থাপন করা হয়েছে (jQuery এর পরে, jQM এর আগে)। এছাড়াও ফোনগ্যাপ বিল্ড ডক্সগুলি <script src="phonegap.js"></script>HTML এ কোথাও রাখার কথা বলে । আমি এটি পুরোপুরি ছেড়ে রেখেছি এবং এটির অস্তিত্ব পরীক্ষা করার সুবিধার্থে get .getScript () ব্যবহার করে লোড করছি।

isPhoneGap = false;
isPhoneGapReady = false;
isjQMReady = false;

$.getScript("phonegap.js")
.done(function () {
    isPhoneGap = true;
    document.addEventListener("deviceready", function () {
        console.log("phonegap ready - device/app mode");
        isPhoneGapReady = true;
        Application.checkReadyState();
    }, false);
})
.fail(function () {
    console.log("phonegap load failed - browser only");
    isPhoneGapReady = true;
    Application.checkReadyState();
});

$(document).bind("mobileinit", function () {
    Application.mobileInit();
    $(document).one("pageinit", "#Your_First_jQM_Page", function () {
        isjQMReady = true;
        Application.checkReadyState();
    });
});

Application = {
    checkReadyState: function () {
        if (isjQMReady && isPhoneGapReady) {
            Application.ready();
        }
    },
    mobileInit: function () {
        // jQM initialization settings go here
        // i.e. $.mobile.defaultPageTransition = 'slide';
    },
    ready: function () {
        // Both phonegap (if available) and jQM are fired up and ready
        // let the custom scripting begin!
    }
}

6

মজার বিষয় হল, অনেক উত্তর, তবে এগুলিতে এই তিনটি বিকল্প অন্তর্ভুক্ত নয়:

1 - কর্ডোভা.জেএস কর্ডোভা অবজেক্টকে বৈশ্বিক পরিসরে সেট করবে। যদি এটি সেখানে থাকে তবে আপনি সম্ভবত কোনও কর্ডোভা স্কোপে দৌড়াচ্ছেন।

var isCordovaApp = !!window.cordova;

2 - কর্ডোভা আপনার অ্যাপ্লিকেশনটি চালাবে কারণ আপনি আপনার ডেস্কটপ থেকে একটি HTML ডকুমেন্ট খুলবেন document HTTP প্রোটোকলের পরিবর্তে এটি ফাইল ব্যবহার করবে। এটি সনাক্তকরণ আপনাকে ধরে নেওয়ার সুযোগ দেয় যে আপনার অ্যাপ্লিকেশন স্থানীয়ভাবে লোড হয়েছিল।

var isCordovaApp = document.URL.indexOf('http://') === -1
  && document.URL.indexOf('https://') === -1;

3 - প্রসঙ্গটি সনাক্ত করতে কর্ডোভা স্ক্রিপ্টের লোড ইভেন্টটি ব্যবহার করুন। স্ক্রিপ্ট অন্তর্ভুক্ত সহজেই বিল্ড প্রসেসে মুছে ফেলা যায় বা স্ক্রিপ্ট লোডিং কেবল একটি ব্রাউজারে ব্যর্থ হয়। যাতে এই গ্লোবাল ভেরিয়েবল সেট করা না হয়।

<script src="../cordova.js" onload="javascript:window.isCordovaApp = true;"></script>

ক্রেডিট অ্যাডোব থেকে ড্যামিয়েন অ্যান্টিপাতে যায়


5

আমি এই পদ্ধতিটি ব্যবহার করি:

debug = (window.cordova === undefined);

debugহতে হবে trueব্রাউজার পরিবেশ উপর, falseডিভাইসে।


4

এটি বাস্তবসম্মত বলে মনে হচ্ছে এবং আমি এটি উত্পাদনতে ব্যবহার করেছি:

if (document.location.protocol == "file:") {
    // file protocol indicates phonegap
    document.addEventListener("deviceready", function() { $(initInternal);} , false);
}
else {
    // no phonegap, start initialisation immediately
    $(initInternal);
}

সূত্র: http://tqcblog.com/2012/05/09/detecting- iPhonegap-cordova-on-startup/


3

সমস্যার সংক্ষিপ্তসারটি হ'ল কর্ডোভা.দেবসকে অপরিজ্ঞাত করা হিসাবে আপনার কোডটি নিশ্চিত হতে পারে না কারণ এটি কারণ কর্ডোভা প্রতিষ্ঠিত করেছে যে আপনার ডিভাইসটি সমর্থিত নয়, বা যদি কারণ কর্ডোভা এখনও নিজেকে প্রস্তুত করছে এবং ডিভাইস প্রস্তুত পরে চালিত হবে if (বা তৃতীয় বিকল্প: কর্ডোভা সঠিকভাবে লোড হয়নি)।

একমাত্র সমাধান হ'ল অপেক্ষার সময়কালের সংজ্ঞা দেওয়া এবং এই সময়ের পরে আপনার কোডটি অবশ্যই ধরে নিতে হবে যে ডিভাইসটি সমর্থিত নয়। আমি আশা করি কর্ডোভা কোথাও একটি প্যারামিটার সেট করে বলবে "আমরা একটি সমর্থিত ডিভাইস সন্ধান করার চেষ্টা করেছি এবং ছেড়ে দিয়েছি" তবে মনে হয় এরকম কোনও প্যারামিটার নেই।

একবার এটি প্রতিষ্ঠিত হয়ে গেলে, আপনি সেই পরিস্থিতিতে যেখানে কোনও সমর্থিত ডিভাইস নেই সেখানে সুনির্দিষ্টভাবে কিছু করতে চাইবেন। ডিভাইসের অ্যাপ বাজারে লিঙ্কগুলি লুকানোর মতো, আমার ক্ষেত্রেও।

আমি এই ফাংশনটি একসাথে বেঁধে রেখেছি যা প্রতিটি পরিস্থিতিকে প্রায় কভার করতে পারে। এটি আপনাকে একটি ডিভাইসডিয়ার হ্যান্ডলার, একটি ডিভাইস-কখনই প্রস্তুত নয় এমন হ্যান্ডলার এবং একটি অপেক্ষা করার সময় সংজ্ঞা দিতে দেয়।

//Deals with the possibility that the code will run on a non-phoneGap supported
//device such as desktop browsers. Gives several options including waiting a while
//for cordova to load after all.
//In:
//onceReady (function) - performed as soon as deviceready fires
//patience 
//  (int) - time to wait before establishing that cordova will never load
//  (boolean false) - don't wait: assume that deviceready will never fire
//neverReady 
//  (function) - performed once it's established deviceready will never fire
//  (boolean true) - if deviceready will never fire, run onceReady anyhow
//  (boolean false or undefined) - if deviceready will never fire, do nothing
function deviceReadyOrNot(onceReady,patience,neverReady){

    if (!window.cordova){
            console.log('Cordova was not loaded when it should have been')
            if (typeof neverReady == "function"){neverReady();}
        //If phoneGap script loaded...
        } else {
            //And device is ready by now...
            if  (cordova.device){
                callback();
            //...or it's loaded but device is not ready
            } else {
                //...we might run the callback after
                if (typeof patience == "number"){
                    //Run the callback as soon as deviceready fires
                    document.addEventListener('deviceready.patience',function(){
                        if (typeof onceReady == "function"){onceReady();}
                    })
                    //Set a timeout to disable the listener
                    window.setTimeout(function(){
                        //If patience has run out, unbind the handler
                        $(document).unbind('deviceready.patience');
                        //If desired, manually run the callback right now
                        if (typeof neverReady == 'function'){neverReady();}
                    },patience);
                //...or we might just do nothing
                } else {
                    //Don't bind a deviceready handler: assume it will never happen
                    if (typeof neverReady == 'function'){neverReady();} 
                    else if (neverReady === true){onceReady();} 
                    else {
                       //Do nothing
                    }
                }
            }
    }

}

3

আমি এটির সাথে যেভাবে করছি তা হ'ল একটি বৈশ্বিক পরিবর্তনশীল ব্যবহার করা যা কর্ডো.জেএস-এর কেবলমাত্র ব্রাউজারের সংস্করণ দ্বারা ওভাররাইট করা। আপনার মূল এইচটিএমএল ফাইলে (সাধারণত index.html) আমার কাছে নিম্নলিখিত স্ক্রিপ্টগুলি রয়েছে যা ক্রম-নির্ভর:

    <script>
        var __cordovaRunningOnBrowser__ = false
    </script>
    <script src="cordova.js"></script> <!-- must be included after __cordovaRunningOnBrowser__ is initialized -->
    <script src="index.js"></script> <!-- must be included after cordova.js so that __cordovaRunningOnBrowser__ is set correctly -->

এবং cordova.jsআমার ভিতরে কেবল আছে:

__cordovaRunningOnBrowser__ = true

কোনও মোবাইল ডিভাইস তৈরি করার সময়, কর্ডোভা.জেএস ব্যবহার করা হবে না (এবং পরিবর্তে প্ল্যাটফর্ম-নির্দিষ্ট কর্ডোভা.জেএস ফাইল ব্যবহার করা হবে), সুতরাং প্রোটোকল, ব্যবহারকারী এজেন্টস বা লাইব্রেরি নির্বিশেষে এই পদ্ধতির 100% সঠিক হওয়ার সুবিধা রয়েছে ভেরিয়েবল (যা পরিবর্তন হতে পারে)। কর্ডোভা.জেজে অন্তর্ভুক্ত থাকা আমার অন্যান্য জিনিস থাকতে পারে তবে তারা এখনও কী তা আমি জানি না।


খুব আকর্ষণীয় পদ্ধতির।

যদিও, আপনার আসলে প্রাথমিক স্ক্রিপ্টের দরকার নেই। আপনি এটি ঠিক সেট করা হচ্ছে জন্য পরীক্ষা করতে পারেন: if ( typeof __cordovaRunningOnBrowser__ !== 'undefined' ) { stuff(); } .. ঠিক?

ঠিক আছে, এটি অপরিজ্ঞাপিত হওয়া অন্য কিছু ভুল বলে ইঙ্গিত দিতে পারে।
বিটি

3

স্ল্যাভমিকের সমাধানের উপর ভিত্তি করে আরেকটি উপায়:

index.htmlআপনার ফোনগ্যাপ উত্স থেকে পাস করা কেবল একটি কোয়েরি প্যারামিটার ব্যবহার করুন । অর্থাত্ Android এর পরিবর্তে

super.loadUrl("file:///android_asset/www/index.html");

ব্যবহার

super.loadUrl("file:///android_asset/www/index.html?phonegap=1");

অন্যান্য প্ল্যাটফর্মগুলিতে কোথায় এটি করা যায় সে সম্পর্কে স্লাভিকমের একটি দুর্দান্ত তালিকা রয়েছে।

তারপরে আপনি index.htmlকেবল এটি করতে পারেন:

if (window.location.href.match(/phonegap=1/)) {
  alert("phonegap");
}
else {
  alert("not phonegap");
}

1
আমি কর্ডোভা ৩.৪.১ ব্যবহার করছি এবং এটি আরও সহজ: আপনার কেবলমাত্র <content src="index.html" />কনফিগার.এক্সএমএল ফাইলের বিকল্পটি পরিবর্তন করতে হবে <content src="index.html?cordova=1" />। এখন পর্যন্ত এটি কাজ করে বলে মনে হচ্ছে এবং এটি এখানে দেওয়া সেরা সমাধান।
মার্টিন এম

2

একটি কোডবেস রাখতে, "প্ল্যাটফর্ম" কোডটি কী চলছে তা আগ্রহী। আমার জন্য এই "প্ল্যাটফর্ম" তিনটি আলাদা জিনিস হতে পারে:

  • 0: কম্পিউটার ব্রাউজার
  • 1: মোবাইল ব্রাউজার
  • 2: ফোনগ্যাপ / কর্ডোভা

প্ল্যাটফর্মটি পরীক্ষা করার উপায়:

var platform;
try {
 cordova.exec(function (param) {
   platform = 2;
  }, function (err) {}, "Echo", "echo", ["test"]);
} catch (e) {
  platform = 'ontouchstart' in document.documentElement ? 1 : 0;
}

বিঃদ্রঃ:

  • কর্ডোভা.জেএস লোড করার পরে এটি চালিত করতে হবে (বডি অনলোড (...), $ (নথি)। প্রস্তুত (...))

  • ডকুমেন্ট.ডোকামেন্টএলমেন্টে 'ontouchstart' ল্যাপটপ এবং ডেস্কটপ মনিটরে উপস্থিত থাকবে যাদের একটি টাচ-সক্ষম স্ক্রিন রয়েছে তাই এটি ডেস্কটপ সত্ত্বেও এটি একটি মোবাইল-ব্রাউজারের প্রতিবেদন করবে। আরও সুনির্দিষ্ট চেক করার বিভিন্ন উপায় রয়েছে তবে আমি এটি ব্যবহার করি কারণ এটি এখনও আমার প্রয়োজন 99% কেসগুলির যত্ন নেয়। আপনি আরও শক্তিশালী কিছু জন্য সর্বদা সেই লাইনটি প্রতিস্থাপন করতে পারেন।


1
আমি typeof cordova !== 'undefined'ব্যতিক্রম হিসাবে মাছ ধরার পরিবর্তে ব্যবহার করার পরামর্শ দিই ।
ক্রাকটোয়া

1

অ্যারন, চেষ্টা করুন

if (PhoneGap.available){
    do PhoneGap stuff;
}

নাহ, আমি করিনি. ফোনগ্যাপ-১.০.০.জেএস উত্স কোডটি দেখুন। ফোনগ্যাপ.ভ্যাভ্যালেবল = ডিভাইসআইএনফো.ইউইইড! == অপরিবর্তিত;
জর্জ ডাব্লু

1

জর্জডাব্লু এর সমাধান ঠিক আছে, কিন্তু বাস্তব ডিভাইসেও ফোনগ্যাপ.ভ্যাবলযোগ্য ফোনগ্যাপের জিনিসগুলি লোড হওয়ার পরেই সত্য, উদাহরণস্বরূপ ডকুমেন্ট.এডএভেন্টলাইস্টারে ডিভাইসরেডি ('ডিভাইসড্রি', ডিভাইসরেডি, ভুয়া) বলা হয়েছে।

সেই সময়ের আগে আপনি যদি জানতে চান তবে আপনি এটি করতে পারেন:

runningInPcBrowser =
    navigator.userAgent.indexOf('Chrome')  >= 0 ||
    navigator.userAgent.indexOf('Firefox') >= 0

এই সমাধানটি ধরে নিয়েছে যে বেশিরভাগ বিকাশকারী ক্রোম বা ফায়ারফক্স ব্যবহার করে বিকাশ করে।


ওপ কোনও প্রোডাকশন ওয়েবসাইটের জন্য সমাধান খুঁজছেন, কেবল দেব নয়।
জেসি হাটাবঘ

1

আমি একই সমস্যা আছে।

আমি আমার ওয়েব পৃষ্ঠায় কর্ডোভা ক্লায়েন্ট দ্বারা লোড করা URL- তে # কর্ডোভা = সত্য যোগ করার এবং অবস্থানের জন্য পরীক্ষার দিকে ঝুঁকছি sh


শেষ পর্যন্ত, আমি আল রেনেউদ তার চতুর্থ দফায় প্রস্তাবিত পথে গিয়েছিলাম এবং বিল্ড স্ক্রিপ্টটি সিদ্ধান্ত নিতে দিই। অ্যান্ড্রয়েড অ্যাসেটস ফোল্ডারে ওয়েবসাইট কোডটি অনুলিপি করার সময় এটি সূচী। Html এ একটি পতাকাকে লক্ষ্যহীন করে। // UNCOMMENT-ON-DEPLOY: window._appInfo.isCordova = সত্য; যখন বিল্ড স্ক্রিপ্টটি আমার অ্যান্ড্রয়েড সম্পদ / www ফোল্ডারে সূচক html অনুলিপি করে, আমি // UNCOMMENT-ON-DEPLOY: স্ট্রিংটি সরাতে এডিট চালাচ্ছি। এটি "কর্ডোভা" running DEST / index.html "চলছে বলে ম্যাসেজ সূচক html << - ইওএফ 1, \ $ এস / \ / \ / ইউনকমেন্ট-অন-ডেপলয়ে: // ডব্লিউকিউ ইওএফ
অস্টিন ফ্রান্স

1

নিম্নলিখিতটি আমার পক্ষে সাম্প্রতিক ফোনগ্যাপ / কর্ডোভা (২.১.০) নিয়ে কাজ করে।

কিভাবে এটা কাজ করে:

  • ধারণা খুব সহজ
  • আমি উপরের সময়সীমা সমাধানের কিছুটির যুক্তি উল্টিয়েছি।
  • ডিভাইস_ডিডি ইভেন্টের জন্য নিবন্ধন করুন ( ফোনগ্যাপ ডক্স দ্বারা প্রস্তাবিত হিসাবে )
    • সময়সীমা পেরোনোর ​​পরে যদি ইভেন্টটি এখনও চালিত না হয় তবে ব্রাউজার ধরে ফ্যালব্যাক।
    • বিপরীতে, উপরের অন্যান্য সমাধানগুলি কিছু ফোনগ্যাপ বৈশিষ্ট্য বা অন্যটি পরীক্ষা করা এবং তাদের পরীক্ষা বিরতি দেখার উপর নির্ভর করে।

সুবিধাদি:

  • ফোনগ্যাপ-প্রস্তাবিত ডিভাইস_ প্রস্তুত ইভেন্টটি ব্যবহার করে।
  • মোবাইল অ্যাপটির কোনও বিলম্ব নেই। ডিভাইস_ডিডি ইভেন্টটি আগুনের সাথে সাথেই আমরা এগিয়ে চলেছি।
  • কোনও ব্যবহারকারী-এজেন্ট স্নিফিং নেই (আমি আমার অ্যাপ্লিকেশনটিকে মোবাইল ওয়েবসাইট হিসাবে পরীক্ষা করতে পছন্দ করি যাতে ব্রাউজার স্নিফিং আমার পক্ষে বিকল্প ছিল না)।
  • অপ্রকাশিত (এবং তাই ভঙ্গুর) ফোনগ্যাপ বৈশিষ্ট্য / বৈশিষ্ট্যগুলির উপর কোনও নির্ভরতা নেই।
  • ডেস্কটপ বা মোবাইল ব্রাউজার ব্যবহার করার পরেও আপনার কোডবেজে আপনার কর্ডোভা.জেগুলি রাখুন। সুতরাং, এটি ওপির প্রশ্নের উত্তর দেয়।
  • উইটজে উপরের কথা বলেছিলেন: 'আমার ইচ্ছা কর্ডোভা কোথাও একটি প্যারামিটার তৈরি করে "আমরা একটি সমর্থিত ডিভাইস খুঁজে পাওয়ার চেষ্টা করেছি এবং ছেড়ে দিয়েছি" তবে মনে হয় এরকম কোনও প্যারামিটার নেই।' সুতরাং আমি এখানে একটি সরবরাহ।

অসুবিধা:

  • সময়সীমা আইকি। তবে আমাদের মোবাইল-অ্যাপ্লিকেশন যুক্তি একটি বিলম্বের উপর নির্ভর করে না; পরিবর্তে, যখন আমরা ওয়েব ব্রাউজার মোডে থাকি তখন এটি ফ্যালব্যাক হিসাবে ব্যবহৃত হয়।

==

একটি নতুন ফাঁকা ফোনগ্যাপ প্রকল্প তৈরি করুন। প্রদত্ত নমুনা index.js এ, নীচে "অ্যাপ" ভেরিয়েবলটি এর সাথে প্রতিস্থাপন করুন:

var app = {
    // denotes whether we are within a mobile device (otherwise we're in a browser)
    iAmPhoneGap: false,
    // how long should we wait for PhoneGap to say the device is ready.
    howPatientAreWe: 10000,
    // id of the 'too_impatient' timeout
    timeoutID: null,
    // id of the 'impatience_remaining' interval reporting.
    impatienceProgressIntervalID: null,

    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // `load`, `deviceready`, `offline`, and `online`.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
        // after 10 seconds, if we still think we're NOT phonegap, give up.
        app.timeoutID = window.setTimeout(function(appReference) {
            if (!app.iAmPhoneGap) // jeepers, this has taken too long.
                // manually trigger (fudge) the receivedEvent() method.   
                appReference.receivedEvent('too_impatient');
        }, howPatientAreWe, this);
        // keep us updated on the console about how much longer to wait.
        app.impatienceProgressIntervalID = window.setInterval(function areWeThereYet() {
                if (typeof areWeThereYet.howLongLeft == "undefined") { 
                    areWeThereYet.howLongLeft = app.howPatientAreWe; // create a static variable
                } 
                areWeThereYet.howLongLeft -= 1000; // not so much longer to wait.

                console.log("areWeThereYet: Will give PhoneGap another " + areWeThereYet.howLongLeft + "ms");
            }, 1000);
    },
    // deviceready Event Handler
    //
    // The scope of `this` is the event. In order to call the `receivedEvent`
    // function, we must explicity call `app.receivedEvent(...);`
    onDeviceReady: function() {
        app.iAmPhoneGap = true; // We have a device.
        app.receivedEvent('deviceready');

        // clear the 'too_impatient' timeout .
        window.clearTimeout(app.timeoutID); 
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        // clear the "areWeThereYet" reporting.
        window.clearInterval(app.impatienceProgressIntervalID);
        console.log('Received Event: ' + id);
        myCustomJS(app.iAmPhoneGap); // run my application.
    }
};

app.initialize();

function myCustomJS(trueIfIAmPhoneGap) {
    // put your custom javascript here.
    alert("I am "+ (trueIfIAmPhoneGap?"PhoneGap":"a Browser"));
}

1

আমাদের অ্যাপ্লিকেশন শুরু করার সময় আমি বেশ কয়েক মাস আগে এই সমস্যায় পড়েছি কারণ আমরা অ্যাপ্লিকেশনটি চেয়েছিলাম "browser-compatible " হওয়া উচিত (এই দৃশ্যে কিছু কার্যকারিতা ব্লক করা হবে: বুঝতে পেরে অডিও রেকর্ডিং, কম্পাস ইত্যাদি)।

100%অ্যাপ্লিকেশন বাস্তবায়ন প্রসঙ্গে PRE- নির্ধারণের একমাত্র (এবং আমি 100 শত শতাংশ শর্তের উপর জোর দিয়েছি) সমাধানটি হ'ল:

  • একটি জেএস "পতাকা" পরিবর্তনশীলটিকে সত্যে আরম্ভ করুন, এবং অল-ওয়েব প্রসঙ্গে থাকাকালে এটি মিথ্যাতে পরিবর্তন করুন;

  • অতএব আপনি " willIBeInPhoneGapSometimesInTheNearFuture()" এর মতো একটি কল ব্যবহার করতে পারেন (এটি পিআরই-পিজি, অবশ্যই আপনি এখনও পিজি-এপিআইগুলিতে কল করতে পারেন কিনা তা পরীক্ষা করার একটি পোষ্ট-পিজি পদ্ধতি প্রয়োজন তবে এটি একটি তুচ্ছ)।

  • তারপরে আপনি বলেছেন: " but how do you determine the execution context?"; উত্তরটি হ'ল: "তুমি কর না" (কারণ আমি বিশ্বাস করি না আপনি নির্ভরযোগ্যভাবে এটি করতে পারবেন, যদি না পিজির এই উজ্জ্বল লোকেরা তাদের এপিআই কোডটিতে না করে);

  • আপনি একটি বিল্ড স্ক্রিপ্ট লিখেছেন যা এটি আপনার জন্য করে: দুটি ভেরিয়েন্ট সহ একটি কোডবেস।


1

সত্যিকার অর্থে প্রশ্নের উত্তর নয় , তবে আমি যখন ডেস্কটপ ব্রাউজারে পরীক্ষা করি, তখন আমি অ্যাপ্লিকেশন ডিভাইস চালিত ডিভাইসগুলিকে আগুন না ছড়িয়ে দিয়ে লোড করার জন্য একটি লোকালস্টোরেজ মান সেট করেছিলাম।

function main() {

    // Initiating the app here.
};

/* Listen for ready events from pheongap */
document.addEventListener("deviceready", main, false);

// When testing outside ipad app, use jquerys ready event instead. 
$(function() {

    if (localStorage["notPhonegap"]) {

        main();
    }
});

1

কোনটিই কাজ করে না, যদি না আপনি অ্যাপ্লিকেশনটির ডেস্কটপ সংস্করণ থেকে ফোনগ্যাপ জাভাস্ক্রিপ্ট ফাইলটি সরিয়ে না ফেলে, যা একটি কোডবেস থাকার আমার লক্ষ্যকে পরাস্ত করে।

আর একটি বিকল্প হবে মার্জ ব্যবহার করা ফোল্ডার , নীচের স্ক্রিনশটটি দেখুন।

আপনি প্ল্যাটফর্ম-নির্দিষ্ট ফাইলগুলি / ওভাররাইড ডিফল্টগুলি যুক্ত করতে পারেন।

(এটি কিছু পরিস্থিতিতে কৌশলটি করা উচিত)

এখানে চিত্র বর্ণনা লিখুন


অন্য কথায়: ব্রাউজারটি সনাক্ত করার পরিবর্তে, আপনি কেবলমাত্র ডেস্কটপ তৈরি / আইওএসের জন্য নির্দিষ্ট ফাইল সংযুক্ত করার জন্য নির্দিষ্ট কিছু ফাইল অন্তর্ভুক্ত করবেন না।


1

অনুকরণকারী ডিভাইস সক্রিয় থাকলেও ডেস্কটপ ব্রাউজারটি সনাক্ত করুন

উইন্ডোজ এবং ম্যাক মেশিনে কাজ করে। লিনাক্সের বিশদ বিবরণের জন্য একটি সমাধান খুঁজে পাওয়া দরকার

var mobileDevice = false;
if(navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|IEMobile/))
    mobileDevice = true; 

if(mobileDevice && navigator.platform.match(/Win|Mac/i))
    mobileDevice = false; // This is desktop browser emulator

if(mobileDevice) {
    // include cordova files
}

0

আমি এখানে তালিকাবদ্ধ দুটি প্রযুক্তির সংমিশ্রণটি পেয়েছি যা সবচেয়ে ভাল কাজ করেছে, প্রথমত পরীক্ষা করুন যে কর্ডোভা / ফোনগ্যাপটি অ্যাক্সেস করা যায় কিনা তাও ডিভাইস উপলব্ধ কিনা তা পরীক্ষা করে দেখুন। তাই ভালো:

function _initialize() {
    //do stuff
}

if (window.cordova && window.device) {
    document.addEventListener('deviceready', function () {
      _initialize();
    }, false);
} else {
   _initialize();
}

0

এই পদ্ধতির চেষ্টা করুন:

/**
 * Returns true if the application is running on an actual mobile device.
 */
function isOnDevice(){
    return navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
}

function isDeviceiOS(){
    return navigator.userAgent.match(/(iPhone)/);
}

/**
 * Method for invoking functions once the DOM and the device are ready. This is
 * a replacement function for the JQuery provided method i.e.
 * $(document).ready(...).
 */
function invokeOnReady(callback){
    $(document).ready(function(){
        if (isOnDevice()) {
            document.addEventListener("deviceready", callback, false);
        } else {
            invoke(callback);
        }
    });
}


0

আমি অনুমান করি যে কোনও উপায়ে তারা কি আলাদা না? হা হা ... মজার নয়। এই সমস্যা হবে না কে ভেবেছিল? আপনার বিবেচনার জন্য এখানে সহজ সমাধান। আপনার সার্ভারে বিভিন্ন ফাইল পুশ করুন তারপরে আপনি ফোনগ্যাপে করুন। আমি অস্থায়ীভাবে উপরের প্রস্তাবিত HTTP: চেকের সাথে যেতে চাই।

var isMobileBrowserAndNotPhoneGap = (document.location.protocol == "http:");

আমার আগ্রহ ব্রাউজারগুলি নাবারকে উপরে ঠেলে দেওয়া, তাই আমি সত্যিই কেবল বিচ্ছিন্ন স্ক্রিপ্টের ট্যাগটি মুছতে পারি এবং [ডিডাব্লুতে] পুনর্নির্মাণ টিপতে পারি (তারা যাইহোক স্থাপনার জন্য কিছু সাফ হয়ে যাবে যাতে এটি সেই কাজগুলির মধ্যে একটি হতে পারে)) যাইহোক আমি অনুভব করি পিজির দিকে ধাক্কা দেওয়ার সময় isMobileBrowserAndNotPhoneGap এর সাহায্যে ম্যানুয়ালিভাবে কিছু মন্তব্য করার জন্য এটি একটি ভাল বিকল্প (আরও অনেক কিছুই উপলভ্য নয় বিবেচনা করে)। আবার আমার পরিস্থিতির জন্য আমি মোবাইল ব্রাউজারে নববারটিকে ধাক্কা দেয় এমন (বিচ্ছিন্ন কোড) ফাইলের ট্যাগটি মুছে ফেলব (এটি তত দ্রুত এবং ছোট হবে)। [সুতরাং আপনি যদি সেই অনুকূলিত তবে ম্যানুয়াল সমাধানের জন্য কোডটি বিচ্ছিন্ন করতে পারেন]]


0

কিছুটা সংশোধিত, তবে কোনও সমস্যা ছাড়াই আমার পক্ষে নিখুঁতভাবে কাজ করে।

ইচ্ছাকৃতভাবে কর্ডোভা কেবলমাত্র এম্বেড থাকা ডিভাইসে, ডেস্কটপে নয় লোড করা হয়, তাই আমি ডেস্কটপ ব্রাউজারে কর্ডোভা পুরোপুরি এড়িয়ে চলে। ইউআই এবং এমভিভিএমের পরীক্ষা এবং বিকাশ এবং তাই খুব আরামদায়ক।

এই কোড যেমন রাখুন। ফাইল কর্ডোভা লোডার.জেএস এ

function isEmbedded() {
    return  
    // maybe you can test for better conditions
    //&& /^file:\/{3}[^\/]/i.test(window.location.href) && 
     /ios|iphone|ipod|ipad|android/i.test(navigator.userAgent);
}

if ( isEmbedded() )
{
   var head= document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   script.type= 'text/javascript';
   script.src= 'cordova-2.7.0.js';
   head.appendChild(script);
}

তারপরে কর্ডোভা জাভাস্ক্রিপ্টের পরিবর্তে কর্ডোভালডার.জেএস অন্তর্ভুক্ত

<head>
  <script src="js/cordovaLoader.js"></script>
  <script src="js/jquery.js"></script>
  <script src="js/iscroll.js"></script>
  <script src="js/knockout-2.3.0.js"></script>
</head> 

আপনার কাজ সহজ করুন! :)



0

শুধু তথ্যের জন্য উপায় PhoneGap 3.x মোবাইল এপ্লিকেশন ডেভেলপমেন্ট হটশট

var userLocale = "en-US";
function startApp()
{
// do translations, format numbers, etc.
}
function getLocaleAndStartApp()
{
    navigator.globalization.getLocaleName (
        function (locale) {
            userLocale = locale.value;
            startApp();
        },
        function () {
            // error; start app anyway
            startApp();
        });
}
function executeWhenReady ( callback ) {
    var executed = false;
    document.addEventListener ( "deviceready", function () {
        if (!executed) {
            executed = true;
            if (typeof callback === "function") {
                callback();
            }
        }
    }, false);
    setTimeout ( function () {
        if (!executed) {
            executed = true;
            if (typeof callback === "function") {
                callback();
            }
        }
    }, 1000 );
};
executeWhenReady ( function() {
    getLocaleAndStartApp();
} );

এবং YASMF কাঠামোয়

https://github.com/photokandyStudios/YASMF-Next/blob/master/lib/yasmf/util/core.js#L152


0

আমি উইন্ডো অবজেক্টের সাথে চেষ্টা করছিলাম কিন্তু InAppBrowser- এ রিমোট url খুলতে থাকায় এটি কার্যকর হয়নি। এটি করা সম্ভব হয়নি। সুতরাং এটি অর্জনের সর্বোত্তম ও সহজ উপায় হ'ল ইউআরএলটিতে স্ট্রিং যুক্ত করা যা আপনার ফোনগ্যাপ অ্যাপ্লিকেশন থেকে খোলার দরকার। তারপরে নথির অবস্থানটিতে স্ট্রিং যুক্ত রয়েছে কিনা তা পরীক্ষা করুন।

নীচে এটির জন্য সহজ কোডটি রয়েছে

var ref = window.open('http://yourdomain.org#phonegap', '_blank', 'location=yes');

আপনি url "#fungap" এ একটি স্ট্রিং যুক্ত দেখতে পাবেন S তাই ডোমেন url এ নিম্নলিখিত স্ক্রিপ্টটি যুক্ত করুন

if(window.location.indexOf("#phonegap") > -1){
     alert("Url Loaded in the phonegap App");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.