الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin inappbrowser»

من موسوعة حسوب
لا ملخص تعديل
تحديث
 
(13 مراجعة متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:إضافة المتصفح الداخلي في كوردوفا}}</noinclude>
<noinclude>{{DISPLAYTITLE:إضافة المتصفح الداخلي في كوردوفا}}</noinclude>
[[تصنيف: Cordova]]
[[تصنيف: Cordova]]
[[تصنيف: Plugin]]
[[تصنيف: Cordova Plugin]]
يمكنك عرض المقالات ومقاطع الفيديو وموارد الويب المفيدة داخل تطبيقك. يمكن للمستخدمين الاطلاه على صفحات الويب دون مغادرة تطبيقك.
تساعد إضافة المتصفح الداخلي (cordova-plugin-inappbrowser) على عرض المقالات ومقاطع الفيديو وموارد الويب المفيدة داخل تطبيقك. كما تمُكن المستخدمين  أيضًا من الاطلاع على صفحات الويب دون مغادرة التطبيق.  
لمعرفة كيفية استخدام هذه الإضافة، اطلع على [#sample sample] في أسفل هذه الصفحة، أو انتقل مباشرة إلى [#reference reference].


توفر هذه الإضافة [[Cordova/webviews|عارض]] يمكن عرضه عند استدعاء التابع <code>cordova.InAppBrowser.open()</code>.  
لمعرفة كيفية استخدام هذه الإضافة، اطلع على [[Cordova/cordova plugin inappbrowser#.D9.85.D8.AB.D8.A7.D9.84 .D8.AA.D9.88.D8.B6.D9.8A.D8.AD.D9.8A|المثال التوضيحي]] في نهاية هذه الصفحة.
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');‎</syntaxhighlight>


لقد تم تعريف الدالة <code>cordova.InAppBrowser.open()</code> لتكون بديلًا للدالة <code>window.open()</code>. استدعاءات <code>window.open()</code> الحالية يمكن أن تسنخدم نافذة InAppBrowser، عن طريق استبدال window.open:  
توفر هذه الإضافة مُتصفحًا يمكن عرضه عند استدعاء التابع <code>cordova.InAppBrowser.open()‎</code>.
__TOC__<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');‎</syntaxhighlight>
 
لقد تم تعريف التابع <code>cordova.InAppBrowser.open()</code> ليكون بديلًا للدالة <code>window.open()</code>. يمكن لاستدعاءات الدالة<code>window.open()</code> الحالية أن تستخدم نافذةَ <code>InAppBrowser</code> عن طريق استبدال <code>window.open</code> كما هو موضح في المثال التالي:  
<syntaxhighlight lang="javascript">window.open = cordova.InAppBrowser.open;‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">window.open = cordova.InAppBrowser.open;‎</syntaxhighlight>  


تتصرف النافذة InAppBrowser كمتصفح ويب عادي، ولا يمكنها الوصول إلى الواجهات البرمجية لكوردوفا. لهذا السبب، يُنصح باستخدام InAppBrowser إذا احتجت إلى تحميل محتوى خارجي (غير موثوق به)، بدلاً من تحميله في [[Cordova/webviews|عارض]] كوردوفا الرئيسي. InAppBrowser ليس معنِيًا بالقائمة البيضاء، ولا يفتح روابط في متصفح النظام.  
تتصرف النافذة <code>InAppBrowser</code> كمتصفح عادي، ولا يمكنها الوصول إلى الواجهات البرمجية لكوردوفا. لهذا السبب، يُنصَح باستخدام <code>InAppBrowser</code> إذا احتجت إلى تحميل محتوى خارجي (غير موثوق به)، بدلًا من تحميله في [[Cordova/webviews|عارض]] كوردوفا الرئيسي. <code>InAppBrowser</code> ليس معنيًا [[Cordova/whitelist|باللوائح البيضاء]]، ولا يفتح روابط في متصفح النظام.  


يوفر InAppBrowser بشكل افتراضي عناصر الواجهة الرسومية (GUI) للمستخدم (back, forward, done).  
يوفر <code>InAppBrowser</code> بشكل افتراضي عناصر الواجهة الرسومية (GUI) للمستخدم (back, forward, done).  


للتوافق مع الإصدارات القديمة، تنشُبُ هذه الإضافة أيضًا مع الخُطاف <code>window.open</code>. ومع ذلك، يمكن أن يكون للخطاف <code>window.open</code> المثبت مع الإضافة تأثيرات جانبية غير مقصودة (خاصة إذا تم تضمين هذه الإضافة كمجرد ارتباط لإضافة أخرى). سيُزال خطاف <code>window.open</code> في إصدار رئيسي مستقبلي. إلى حين إزالة الخطاف من الإضافة، يمكن للتطبيقات استعادة السلوك الافتراضي يدويًا:  
للتوافق مع الإصدارات القديمة، تربط هذه الإضافةُ الدالةَ <code>window.open</code> مع [[Cordova/hooks|خطّاف]]. لكن يمكن أن يكون [[Cordova/hooks|للخطّاف]] الذي رُبطَت فيه الدالة <code>window.open</code> تأثيرات جانبية غير مقصودة (خاصة إذا تم تضمين هذه الإضافة كارتباط لإضافة أخرى). سيُزال [[Cordova/hooks|خطاف]] الدالة <code>window.open</code> في الإصدار الرئيسي مستقبلًا. إلى حين إزالة ذلك الخطاف من الإضافة، يمكن للتطبيقات استعادة السلوك الافتراضي يدويًا عبر تنفيذ الأمر التالي:  
<syntaxhighlight lang="javascript">delete window.open // Reverts the call back to its prototype's default‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">delete window.open // إعادة رد النداء إلى وضعه الافتراضي</syntaxhighlight>  


على الرغم من أن <code>window.open</code> موجودٌ في النطاق العام، إلا أنّ الكائن InAppBrowser لن يكون متوفرًا إلا بعد إطلاق الحدث <code>deviceready</code>.  
على الرغم من أنَّ الدالة <code>window.open</code> موجودة في النطاق العام، إلا أنّ الكائن <code>InAppBrowser</code> لن يكون متوفرًا إلا بعد إطلاق الحدث <code>[[Cordova/events#deviceready|deviceready]]</code>.  
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
function onDeviceReady() {
سطر 24: سطر 25:
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  


الإبلاغ عن مشكلات في هذا الإضافة على [https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22cordova-plugin-inappbrowser%22%20ORDER%20BY%20priority%20DESC%2C%20summary%20ASC%2C%20updatedDate%20DESC Apache Cordova issue tracker]
==التثبيت==
 
يمكنك تثبيت هذه الإضافة عبر الأمر التالي:<syntaxhighlight lang="shell">cordova plugin add cordova-plugin-inappbrowser‎</syntaxhighlight>  
==مرجع==
 
== التثبيت ==  
<syntaxhighlight lang="shell">cordova plugin add cordova-plugin-inappbrowser‎</syntaxhighlight>  


ان كنت تريد أن تُعرض جميع الصفحات المُحملة في تطبيقك في InAppBrowser، فيمكنك ببساطة أن تنشُب في [[Cordova/hooks|الخطاف]] <code>window.open</code> أثناء التهيئة. مثلا:  
إن كنت تريد أن تُعرض جميع الصفحات المُحملة في تطبيقك في نافذة <code>InAppBrowser</code>، يمكنك ببساطة أن تربط الدالة <code>window.open</code> بخطاف أثناء التهيئة. إليك المثال التالي:  
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
<syntaxhighlight lang="javascript">document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
function onDeviceReady() {
سطر 37: سطر 34:
}‎</syntaxhighlight>  
}‎</syntaxhighlight>  


== قرطبة.InAppBrowser.open==  
== <code>cordova.InAppBrowser.open</code>==  


يفتح هذا التابع عنوان URL في نسخة جديدة (instance) من <code>InAppBrowser</code>، أو في نسخة من المتصفح الحالي، أو متصفح النظام.
يفتح هذا التابع عنوانًا في نسخة جديدة (instance) من <code>InAppBrowser</code>، أو في نسخة من المتصفح الحالي، أو في متصفح النظام:
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open(url, target, options);‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open(url, target, options);‎</syntaxhighlight>المعاملات المُمرَّرة إلى هذه الدالة هي:
* '''ref''': يشير إلى النافذة <code>InAppBrowser</code> عندمت يُضبط المعامل target عند القيمة <code>'_blank'</code>. (InAppBrowser)
* '''url''': العنوان المراد تحميله (سلسلة نصية). استدع على هذا المعامل الدالةَ <code>encodeURI()</code> إن كان العنوان URL يحتوي على أحرف اليونيكود.
* '''target''': يحدد المكان الذي سيُحمّل فيه عنوان URL، وهو معامل اختياري، قيمته الافتراضية تساوي <code>_self</code>. (سلسلة نصية)
* <code>_self</code>: يُفتح العنوان في [[Cordova/webviews|عارض]] كوردوفا إن كان موجودًا في اللائحة البيضاء، وإلا فسيُفتح في <code>InAppBrowser</code>.
* <code>_blank</code>: يُفتح في <code>InAppBrowser</code>.
* <code>_system</code>: يفتح في متصفح النظام.
* '''options''': خيارات للنافذة <code>InAppBrowser</code>. اختياري، قيمته الافتراضية تساوي <code>location=yes</code>. (سلسلة نصية)


يجب ألا تحتوي السلسلة النصية <code>options</code> على أية مسافة فارغة، ويجب أن تُفصل أزواج الميزات name/value بفاصلة. أسماء الميزات غير حساسة لحالة الأحرف.  
* <code>ref</code>: يشير إلى النافذة <code>InAppBrowser</code> عندما يُضبَط المعامل <code>target</code> إلى القيمة <code>'‎_blank'</code>. ‏(<code>InAppBrowser</code>)


جميع المنصات تدعم:
* <code>url</code>: سلسلة نصية تمثِّل العنوان المراد تحميله. مرّر هذا المعامل إلى الدالةَ <code>encodeURI()‎</code> إن كان العنوان يحتوي على محارف يونيكود.
* '''location''': اضبط هذه الخاصية إلى القيمة <code>yes</code> أو <code>no</code> لإظهار شريط الموقع في <code>InAppBrowser</code> أو إخفائه.  


يدعم أندرويد هذه الخيارات الإضافية:
* <code>target</code>: سلسلة نصية تحدِّد المكان الذي سيُحمّل فيه العنوان. وهو معامل اختياري، قيمته الافتراضية تساوي ‎<code>_self</code>.
* '''hidden''': اضبطه هذا الخيار إلى القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة، بدون إظهاره. يُطلق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه عند القيمة <code>no</code> (افتراضية) لفتح المتصفح وتحميل الصفحة بشكل طبيعي.
** <code>_self</code>: يُفتح في [[Cordova/webviews|عارض]] كوردوفا إن كان العنوان مُدرجًا في [[Cordova/whitelist|اللائحة البيضاء]]، وإلا فسيُفتح في نافذة <code>InAppBrowser</code>.
* '''clearcache''': اضبط هذا الخيار عند القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملف تعريف الارتباط () في المتصفح قبل فتح النافذة الجديدة
** <code>_blank</code>: يُفتح في <code>InAppBrowser</code>.
* '''clearsessioncache''': اضبط هذا الخيار عند القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملف تعريف الارتباط (cookie) قبل فتح النافذة الجديدة
** <code>_system</code>: يفتح في متصفح النظام.
* '''closebuttoncaption''': اعط لهذا الخيار سلسلةً نصيةً لاستخدامها كتسميةٍ للزر بدلًا من الحرف X. تذطر أنه سيكون عليك ترجمة هذه القيمة بنفسك.
* '''closebuttoncolor''': اعط لهذا الخيار سلسلةً نصية تمثل قيمة لونية سداسي عشرية (hex color) صالحة، مثل: <code>#00ff00</code>، وسيتغيّر لون زر الإغلاق من اللون الافتراضي، سواءً كان نصًا، أو الحرف الافتراضيً X. لا يكون لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن قيمة الموقع (location) إلى <code>yes</code>.
* '''footer''': اضبط هذا الخيار عند القيمة <code>yes</code> لإظهار زر لإغلاق في أسفل النافذة، بشكل مماثلٍ للزر '''Done''' في iOS. سيظهر زر الإغلاق في رأس النافذة، ومن ثم استخدم '''closebuttoncaption''' و '''closebuttoncolor''' لتعيين خصائصه.
* '''footercolor''': اعط لهذا الخيار سلسلة نصية تمثل لونًا سداسي عشريًا (hex color) صالحًا، مثل <code>#00ff00</code> أو <code>#CC00ff00</code> (<code>#aarrggbb</code>)، وسيتغيّر لون تذييل النافذة عن اللون الافتراضي. ليس لهذا الخيار تأثيرٌ إلا إن عيّن المُستخدم '''footer''' إلى القيمة <code>yes</code>.
* '''hardwareback''': اضبط هذا الخيار عند القيمة <code>yes</code> لاستخدام زر الرجوع الخاص بالجهاز للرجوع للخلف خلال تاريخ النافذة <code>InAppBrowser</code>. إذا لم تكن هناك صفحات سابقة، فسيتم إغلاق <code>InAppBrowser</code>. القيمة الافتراضية هي <code>yes</code>، لذا يجب تعيينها إلى القيمة <code>no</code> إن كنت تريد أن تجعل زر الرجوع يغلق InAppBrowser.  
* '''hidenavigationbuttons''': اضبط هذا الخيار عند القيمة <code>yes</code> لإخفاء أزرار التنقل على شريط الأدوات، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الموقع (location) عند القيمة <code>yes</code>. القيمة الافتراضية هي <code>no</code>.
* '''hideurlbar''': اضبط هذا الخيار عند القيمة <code>yes</code> لإخفاء شريط العنوان من شريط أدوات الموقع، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الموقع (location) عند القيمة <code>yes</code>. القيمة الافتراضية هي <code>no</code>.
* '''navigationbuttoncolor''': اعط لهذا الخيار سلسلة نصية تمثل لونًا سداسي عشريًا (hex color) صالحًا، مثل: <code>#00ff00</code>، وسيغير لون أزرار التنقل عن اللون الافتراضي. ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الموقع (location) عند القيمة <code>yes</code>، ولم تُعيّن hidenavigationbuttons عند القيمة <code>yes</code>.  
* '''toolbarcolor''': اعط لهذا الخيار سلسلة نصية تمثل لونًا سداسي عشريًا (hex color) صالحًا، مثل: <code>#00ff00</code>، وسيغير لون شريط الأدوات من اللون الافتراضي. يكون له تأثير فقط إذا تم تعيين موقع (location) المستخدم عند القيمة <code>yes</code>.
* '''zoom''': اضبط هذا الخيار عند القيمة <code>yes</code> لعرض عناصر التحكم في الحجم في متصفح أندرويد، أو اضبطه عند القيمة <code>no</code> إن أردت إخفاءها. القيمة الافتراضية هي <code>yes</code>.  
* '''mediaPlaybackRequiresUserAction''': اضبط هذا الخيار عند القيمة <code>yes</code> لمنع صوتيات أو فيديوها HTML5 من التشغيل التلقائي (القيمة الافتراضية هي <code>no</code>).
* '''shouldPauseOnSuspend''': اضبط هذا الخيار عند القيمة <code>yes</code> لجعل [[Cordova/webviews|عارض]] InAppBrowser يتوقف أو يستأنف مع التطبيق، لإيقاف صوت الخلفية (قد يكون هذا ضروريًا لتجنب المشكلات التي تخص Google Play كما هو موضح في [https://issues.apache.org/jira/browse/CB-11013 CB-11013]).
* '''useWideViewPort''': يحدد هذا الخيار ما إذا كان [[Cordova/webviews|العارض]] يجب أن يدعم الوسم الوصفي "viewport" الخاص بـ HTML، أو يجب أن يستخدم معرضًا (viewport) واسعًا. عندما يُعطى هذا الإعداد القيمة <code>no</code>، سيُعيّن عرض المخطط (layout) إلى قيمة عرض [[Cordova/webviews|العارض]] بوحدة البكسل المستقلة عن الجهاز (CSS). إما إن أُعطي هذا الإعداد القيمة <code>yes</code>، وكانت الصفحة تحتوي الوسم الوصفي viewport، فستُستخدم قيمة العرض المحددة في الوسم. إن لم تحتوِ الصفحة على الوسم، أو لم تحدد قيمةً للعرض، فسيُستخدام [[Cordova/webviews|عارض]] واسعٌ. (القيمة الافتراضية هي <code>yes</code>).  


تدعم منصة iOS الخيارات الإضافية التالية:
* <code>options</code>: سلسلة نصية تحوي خيارات النافذة <code>InAppBrowser</code>. وهو معامل اختياري، وقيمته الافتراضية هي <code>location=yes</code>. يجب ألا تحتوي السلسلة النصية <code>options</code> على أية مسافة فارغة، ويجب أن تُفصل الأزواج اسم/قيمة (name/value) للميزات بفاصلة. كما أنّ أسماء الميزات غير حساسة لحالة الأحرف.
* '''hidden''': اضبط هذا الخيار عند القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة، ولكن دون إظهارها. سيُطلق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه عند القيمة <code>no</code> (الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.
تدعم جميع المنصات الخيار التالي:
* '''clearcache''': اضبط هذا الخيار عند القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملف تعريف الارتباط (cookie cache) للمتصفح قبل فتح النافذة الجديدة
* <code>location</code>: اضبط هذه الخاصية إلى القيمة <code>yes</code> أو <code>no</code> لإظهار شريط التصفح (location bar) في <code>InAppBrowser</code> أو إخفائه.  
* '''clearsessioncache''': اضبط هذا الخيار عند القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملف تعريف الارتباط (cookie) قبل فتح النافذة الجديدة
تدعم [[Cordova/plugins android|منصة أندرويد]] هذه الخيارات الإضافية:
* '''closebuttoncolor''': اعط لهذا الخيار سلسلةً نصيةً تمثل لونًا سداس عشريًا (hex color) صالحًا، مثل: <code>#00ff00</code>، لتغيير لون الزر '''Done''' الافتراضي. لا يُطبق هذا الإعداد إلا عند تفعيل شريط الأدوات.  
* <code>hidden</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة بدون إظهاره. يُطلق الحدث <code>loadstop</code> عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة <code>no</code> (القيمة الافتراضية) لفتح المتصفح وتحميل الصفحة بشكل طبيعي.  
* '''closebuttoncaption''': اعط هذا الخيار سلسلةً نصيةً لاستخدامها كتسميةِ للزر '''Done'''. تذكر أن عليك مراعاة الإعدادات اللغوية المحلية بنفسك.
* <code>beforeload</code>: عين هذا الخيار لتمكين الحدث <code>Beforeeload</code> من تعديل الصفحات التي حُمِّلت فعليا في المتصفح. القيم المقبولة هي:
* '''disallowoverscroll''': يُضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> (الإعداد الافتراضي هو <code>no</code>). لتشغيل أو إيقاف الخاصية UIWebViewBounce.
** <code>get</code>: لاعتراض طلبات GET فقط
* '''hidenavigationbuttons''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> لتشغيل أزرار التنقل (navigation buttons) في شريط الأدوات أو تعطيلها(الإعداد الافتراضي هوظ <code>no</code>). لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.  
** <code>post</code>: لاعتراض طلبات POST
* '''navigationbuttoncolor''': اعط لهذا الخيار سلسلةًً نصيةًً تمثل لونًا سداس عشريًا (hex color) صالحًا، مثل: <code>#00ff00</code>، لتغيير اللون الافتراضي. لا يُطبّق هذا الخيار إلا إذا عند إظهار أزرار التنقل.
** <code>yes</code>: لاعتراض طلبات GET و POST معا. لاحظ أنّ طلبات POST غير مدعومة حاليًا وستُتجاهل (إذا قمت بتعيين القيمة <code>beforeload = post</code>، فسيؤدي ذلك إلى إطلاق خطأ).
* '''toolbar''': اعط لهذا الخيار <code>yes</code> أو <code>no</code> لتشغيل شريط الأدوات أو تعطيله في InAppBrowser (الإعداد الافتراضي هو <code>yes</code>)
* '''toolbarcolor''': اعط لهذا الخيار سلسلةً نصيةً تمثل لونًا سداس عشريًا (hex color) صالحًا، مثل: <code>#00ff00</code>، لتغيير اللون الافتراضي لشريط الأدوات. لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
* '''toolbartranslucent''': اعط لهذا الخيار <code>yes</code> أو <code>no</code> لجعل شريط الأدوات شبه شفاف (translucent) (القيمة الافتراضية هي <code>yes</code>). لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.  
* '''enableViewportScale''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> لمنع تعديل حجم إطار العرض (viewport) عبر وسم وصفي (القيمة الافتراضية هي <code>no</code>).  
* '''mediaPlaybackRequiresUserAction''': اضبط هذا الخيار عند القيمة <code>yes</code> لمنع صوتيات أو فيديوهات HTML5 من التشغيل التلقائي (القيمة الافتراضية هي <code>no</code>).
* '''allowInlineMediaPlayback''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> للسماح بتشغيل وسائط HTML5 المُدرجة على السطر (in-line)، وعرضها في نافذة المتصفح بدلاً من واجهة تشغيلٍ خاصةٍ بالجهاز. يجب أن يشتمل عنصر <code>video</code> في HTML على الخاصية <code>webkit-playsinline</code> (القيمة الافتراضية هي <code>no</code>)
* '''keyboardDisplayRequiresUserAction''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> لفتح لوحة المفاتيح عندما تتلقى عناصر النموذج (form) التركيز (focus) عبر استدعاء دالة [[JavaScript|جافااسكريبت]] <code>focus()</code> (القيمة الافتراضية هي <code>yes</code>).
* '''suppressesIncrementalRendering''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> للانتظار حتى يتم استلام كل محتوى إطار العرض الجديد قبل عرضه (القيمة الافتراضية هي <code>no</code>).
* '''presentationstyle''': اعط لهذا الخيار القيمة <code>pagesheet</code> أو <code>formsheet</code> أو <code>fullscreen</code> لتعيين [http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle presentation style] (القيمة الافتراضية هي <code>fullscreen</code>).
* '''transitionstyle''': اعط لهذا الخيار <code>fliphorizontal</code> أو <code>crossdissolve</code> أو <code>coververtical</code> لتعيين [http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle transition style] (القيمة الافتراضية هي <code>coververtical</code>).
* '''toolbarposition''': اضبط هذا الخيار عند القيمة <code>top</code> أو <code>bottom</code> (الإعداد الافتراضي هو <code>bottom</code>). لجعل شريط الأدوات في أعلى النافذة أو أسفلها.
* '''hidespinner''': اضبط هذا الخيار عند القيمة <code>yes</code> أو <code>no</code> لتغيير مستوى رؤية (visibility) مؤشر التحميل (القيمة الافتراضية هي <code>no</code>).  


تدعم منصة ويندوز الخيارات الإضافية التالية:  
* <code>c'''beforeload'''learcache</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط (cookie cache) في المتصفح قبل فتح النافذة الجديدة
* '''hidden''': اضبط هذا الخيار عند القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة، دون إظهاره. يُطلق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه عند القيمة <code>no</code> (الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.  
* <code>clearsessioncache</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط قبل فتح النافذة الجديدة
* '''hardwareback''': يعمل هذا الخيار بطريقة مشابهة لمنصة أندرويد.  
* <code>closebuttoncaption</code>: أعطِ لهذا الخيار سلسلةً نصيةً لاستخدامها كتسميةٍ للزر بدلًا من الحرف <code>X</code>. تذكّر أنه سيكون عليك مراعاة الإعدادات اللغوية المحلية بنفسك.
* '''fullscreen''': اضبط هذا الخيار عند القيمة <code>yes</code> لإنشاء مركبة المتصفح بدون إحاطته بحدود. يرجى ملاحظة أنه إذا تم تحديد '''location=no''' أيضًا، فلن يُقدّم للمستخدم أي مُركّبةٍ (control) لإغلاق نافذة IAB.  
* <code>closebuttoncolor</code>: أعطِ لهذا الخيار سلسلةً نصيةً تمثل قيمة لونية ست عشرية (hex color) صالحة، مثل: ‎<code>#00ff00</code>، لأجل تغيير لون زر الإغلاق الافتراضي، سواءً كان نصًا، أو كان يساوي القيمة الافتراضية <code>X</code>. لا يكون لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار <code>location</code> إلى القيمة <code>yes</code>.
=== المنصات المدعومة ===
* <code>footer</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإظهار زر الإغلاق في أسفل النافذة بشكل مماثلٍ للزر <code>Done</code> في منصة iOS، سيظهر زر الإغلاق بشكل مماثلٍ لترويسة (header) النافذة، لذلك استخدم <code>closebuttoncaption</code> و <code>closebuttoncolor</code> لتعيين خصائصه.
* <code>footercolor</code>: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل ‎<code>#00ff00</code> أو ‎<code>#CC00ff00</code> (<code>#aarrggbb</code>)‎، لتغيير لون تذييل (footer) النافذة الافتراضي. ليس لهذا الخيار تأثيرٌ إلا إن عيّن المُستخدم الخيارَ <code>footer</code> إلى القيمة <code>yes</code>.
* <code>hardwareback</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لاستخدام زر الرجوع الخاص بالجهاز للرجوع للخلف إلى الصفحات الموجودة في تاريخ نافذة <code>InAppBrowser</code> (الصفحات التي جرى زيارتها من قبل). إذا لم تكن هناك صفحات سابقة، فسيتم إغلاق <code>InAppBrowser</code>. القيمة الافتراضية هي <code>yes</code>، إن كنت تريد أن تجعل زر الرجوع يغلق نافذة <code>InAppBrowser</code>، فعيّن هذا الخيار إلى القيمة <code>no</code> .
* <code>hidenavigationbuttons</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإخفاء أزرار التصفح (navigation buttons) على شريط التصفح (location toolbar)، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار <code>location</code> إلى القيمة <code>yes</code>. القيمة الافتراضية هي <code>no</code>.
* <code>hideurlbar</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإخفاء شريط العنوان من شريط التصفح، ليس لهذا الخيار تأثيرًا إلا إن كان المستخدم قد عيّن الخيار <code>location</code> إلى القيمة <code>yes</code>. القيمة الافتراضية هي <code>no</code>.
* <code>navigationbuttoncolor</code>: أعطِ لهذا الخيار سلسلة نصية تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎<code>#00ff00</code>، لتغيير لون أزرار التصفح الافتراضي. ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار <code>location</code> إلى القيمة <code>yes</code>، وكانت قيمة الخيار <code>hidenavigationbuttons</code> تخالف <code>yes</code>.
* <code>toolbarcolor</code>: أعطِ لهذا الخيار سلسلة نصية تمثل لونًا ست عشريًا صالحًا، مثل: ‎<code>#00ff00</code>، لتغيير لون شريط الأدوات الافتراضي. ليس لهذا الخيار تأثيرًا إلا إن كان المستخدم قد عيّن الخيار <code>location</code> إلى القيمة <code>yes</code>.
* <code>lefttoright</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لأجل تبديل مواضع أزرار التنقل وزر الإغلاق. على وجه التحديد، ستتحول أزرار التنقل إلى الزر الأيسر وينتقل زر الإغلاق إلى اليمين.
* <code>zoom</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لعرض عناصر التحكم في الحجم في متصفح أندرويد، أو اضبطه إلى القيمة <code>no</code> إن أردت إخفاءها. القيمة الافتراضية هي <code>yes</code>.
* <code>mediaPlaybackRequiresUserAction</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمنع صوتيات أو فيديوها HTML5 من التشغيل التلقائي. القيمة الافتراضية هي <code>no</code>.
* <code>shouldPauseOnSuspend</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإيقاف [[Cordova/webviews|عارض]] <code>InAppBrowser</code> أو استئنافه مع التطبيق، وذلك لإيقاف صوت الخلفية (قد يكون هذا ضروريًا لتجنب المشكلات التي تخص Google Play كما هو موضح في الصفحة [https://issues.apache.org/jira/browse/CB-11013 CB-11013]).
* <code>useWideViewPort</code>: يحدِّد هذا الخيار ما إذا كان [[Cordova/webviews|العارض]] سيدعم وسم [[HTML]] الوصفي "<code>viewport</code>"، أو أنّ عليه أن يستخدم إطار عرضٍ (viewport) واسعٍ. عندما يُعطَى هذا الخيار القيمة <code>no</code>، سيُعيّن عرض المخطط (layout) إلى قيمة العرض في [[Cordova/webviews|العارض]] محسوبةً بوحدات بكسل مستقلة عن الجهاز المُستخدم (device-independent pixels). إن أُعطي هذا الخيار القيمة <code>yes</code> وكانت الصفحة تحتوي الوسم الوصفي <code>viewport</code>، فستُستخدَم قيمة العرض المحددة في الوسم. إن لم تحتوِ الصفحة على الوسم، أو لم تحدد قيمةً للعرض، فسيُستخدم إطار عرضٍ واسعٍ. القيمة الافتراضية هي <code>yes</code>.
 
تدعم [[Cordova/plugins ios|منصة iOS]] الخيارات الإضافية التالية:  
 
* <code>usewkwebview</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لأجل استخدام محرك <code>WKWebView</code> في <code>InappBrowser</code>. احذف الخيار أو  أو اضبطه إلى القيمة <code>no</code> لأجل استخدام <code>UIWebView</code>. '''ملاحظة''': يتطلب استخدام <code>usewkwebview=yes</code> تثبيت إضافة محرك <code>WKWebView</code> في مشروع كوردوفا (مثل  [https://github.com/apache/cordova-plugin-wkwebview-engine cordova-plugin-wkwebview] أو [https://github.com/ionic-team/cordova-plugin-ionic-webview cordova-plugin-ionic-webview]).
 
*<code>hidden</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة، ولكن دون إظهاره. سيُطلق الحدث <code>loadstop</code> عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة <code>no</code> (الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.
* <code>beforeload</code>: عين هذا الخيار لتمكين الحدث <code>Beforeeload</code> من تعديل الصفحات التي حُمِّلت فعليا في المتصفح. القيم المقبولة هي:
** <code>get</code>: لاعتراض طلبات GET فقط
** <code>post</code>: لاعتراض طلبات POST
** <code>yes</code>: لاعتراض طلبات GET و POST معا. لاحظ أنّ طلبات POST غير مدعومة حاليًا وستُتجاهل (إذا قمت بتعيين القيمة <code>beforeload = post</code>، فسيؤدي ذلك إلى إطلاق خطأ).
*<code>clearcache</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط (cookie cache) للمتصفح قبل فتح النافذة الجديدة
*<code>clearsessioncache</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط قبل فتح النافذة الجديدة.
*<code>closebuttoncolor</code>: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎<code>#00ff00</code>، لتغيير لون الزر <code>Done</code> الافتراضي. لا يُطبق هذا الإعداد إلا عند تفعيل شريط الأدوات.
* <code>cleardata</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمسح كامل التخزين المحلي للمتصفح (ملفات تعريف الارتباط، وتخزين HTML5 المحلي، و IndexedDB ...) قبل فتح النافذة الجديدة.
*<code>closebuttoncaption</code>: أعطِ لهذا الخيار سلسلةً نصيةً لاستخدامها كتسميةِ للزر <code>Done</code>. تذكر أن عليك مراعاة الإعدادات اللغوية المحلية بنفسك.
*<code>disallowoverscroll</code>: يُضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> (القيمة الافتراضية هي <code>no</code>) لتشغيل أو إيقاف الخاصية <code>UIWebViewBounce</code>.
*<code>hidenavigationbuttons</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> لإظهار أزرار التصفح (navigation buttons) في شريط الأدوات أو إخفائها (القيمة الافتراضية هي <code>no</code>). لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
*<code>navigationbuttoncolor</code>: أعطِ لهذا الخيار سلسلةًً نصيةًً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎<code>#00ff00</code>، لتغيير اللون الافتراضي. لا يُطبّق هذا الخيار إلا عند إظهار أزرار التصفح.
*<code>toolbar</code>: أعطِ لهذا الخيار القيمة <code>yes</code> أو <code>no</code> لإظهار شريط الأدوات أو إخفائه في نافذة <code>InAppBrowser</code> (القيمة الافتراضية هي <code>yes</code>).
*<code>toolbarcolor</code>: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎<code>#00ff00</code>، لتغيير اللون الافتراضي لشريط الأدوات. لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
*<code>toolbartranslucent</code>: أعطِ لهذا الخيار القيمة <code>yes</code> أو <code>no</code> لجعل شريط الأدوات شبه شفاف (translucent). القيمة الافتراضية هي <code>yes</code>. لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
* <code>lefttoright</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لأجل تبديل مواضع أزرار التنقل وزر الإغلاق. على وجه التحديد، ستتحول أزرار التنقل إلى الزر الأيسر وينتقل زر الإغلاق إلى اليمين.
*<code>enableViewportScale</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> لمنع تعديل حجم إطار العرض (viewport) عبر الوسم [[HTML/meta|<meta>]] الوصفي. القيمة الافتراضية هي <code>no</code>.
*<code>mediaPlaybackRequiresUserAction</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لمنع صوتيات أو فيديوهات HTML5 من التشغيل التلقائي. القيمة الافتراضية هي <code>no</code>.
*<code>allowInlineMediaPlayback</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> للسماح بتشغيل وسائط HTML5 المُدرجة على السطر (in-line)، وعرضها في نافذة المتصفح بدلًا من واجهة تشغيلٍ خاصةٍ بالجهاز. يجب أن يشتمل عنصر <code>video</code> في HTML على الخاصية <code>webkit-playsinline</code>. القيمة الافتراضية هي <code>no</code>.
*<code>keyboardDisplayRequiresUserAction</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> لفتح لوحة المفاتيح عندما تتلقى عناصر النموذج (form) التركيز (focus) عبر استدعاء دالة [[JavaScript|جافاسكريبت]] <code>focus()‎</code>. القيمة الافتراضية هي <code>yes</code>.
*<code>suppressesIncrementalRendering</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> للانتظار حتى يتم استلام كل محتوى إطار العرض الجديد قبل عرضه. القيمة الافتراضية هي <code>no</code>.
*<code>presentationstyle</code>: اعط لهذا الخيار القيمة <code>pagesheet</code> أو <code>formsheet</code> أو <code>fullscreen</code> لتعيين [http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalPresentationStyle نمط العرض]. القيمة الافتراضية هي <code>fullscreen</code>.
*<code>transitionstyle</code>: اعط لهذا الخيار القيمة <code>fliphorizontal</code> أو <code>crossdissolve</code> أو <code>coververtical</code> لتعيين [http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/modalTransitionStyle نمط الانتقال]. القيمة الافتراضية هي <code>coververtical</code>.
*<code>toolbarposition</code>: اضبط هذا الخيار إلى القيمة <code>top</code> أو <code>bottom</code> لجعل شريط الأدوات في أعلى النافذة أو أسفلها. القيمة الافتراضية هي <code>bottom</code>.
*<code>hidespinner</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> أو <code>no</code> لتغيير رؤية (visibility) مؤشر التحميل. القيمة الافتراضية هي <code>no</code>.
 
تدعم [[Cordova/plugins windows|منصة ويندوز]] الخيارات الإضافية التالية:
* <code>hidden</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإنشاء المتصفح وتحميل الصفحة دون إظهاره. يُطلَق الحدث <code>loadstop</code> عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة <code>no</code> (القيمة الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.  
* <code>hardwareback</code>: يعمل هذا الخيار بطريقة مشابهة لعمله على منصة أندرويد.  
* <code>fullscreen</code>: اضبط هذا الخيار إلى القيمة <code>yes</code> لإنشاء متصفحٍ وعرضه بدون إحاطته بحدود. يرجى ملاحظة أنه إذا تم تحديد الخيار <code>location=no</code> أيضًا، فلن يتوافر للمستخدم أي تحكم (control) لإغلاق النافذة IAB.  
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
سطر 104: سطر 116:
* OSX  
* OSX  
*ويندوز  
*ويندوز  
=== مثال ===
مثال عن استعمال <code>cordova.InAppBrowser.open</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
var ref2 = cordova.InAppBrowser.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');
var ref2 = cordova.InAppBrowser.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');</syntaxhighlight>  
</syntaxhighlight>  
=== ملاحظات خاصة بمنصة OSX ===  
=== ملاحظات خاصة بمنصة OSX ===  


في الوقت الحالي، الهدف (target) الوحيد المدعوم في OSX هو <code>_system</code>.  
في الوقت الحالي، القيمة الوحيدة المدعومة للمعامل <code>target</code> في [[Cordova/platforms osx|منصة OSX]] هي ‎<code>_system</code>.  


لم يتم بعدُ تقديم الهدفين <code>_blank</code> و <code>_self</code>، وسيُتجاهلان بصمت. هي موضع تقدير كبير طلبات سحب والتصحيحات للحصول على هذه للعمل.  
لم يتم بعدُ تقديم الهدفين <code>_blank</code> و <code>_self</code>، وسيُتاجهلان بصمت.  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
* هذه الإضافة مُقدّمة عبر الإطار الذكي iframe،  
* تُقدِّم هذه الإضافة عبر الإطار الذكي iframe،  
* لم يتم تقديم تاريخ التصفح بعدُ (الزِّران <code>back</code> و <code>forward</code> في شريط التصفح LocationBar).  
* لم يتم تقديم تاريخ التصفح (Navigation history) بعدُ (أي الزِّرين <code>back</code> و <code>forward</code> في شريط التصفح <code>LocationBar</code>).  


==InAppBrowser==  
==الكائن <code>InAppBrowser</code>==  


الكائن المُعاد من استدعاء التابع <code>cordova.InAppBrowser.open</code> عند تعيين الهدف target إلى القيمة <code>'_blank'</code>.  
يمثل الكائن المُعاد من استدعاء التابع <code>cordova.InAppBrowser.open</code> عند تعيين المعامل <code>target</code> إلى القيمة <code>'‎_blank'</code>.  
=== التوابع ===
* addEventListener
* removeEventListener
*close
*show
*hide
* executeScript
* insertCSS


==InAppBrowser.addEventListener==  
التوابع التي يمكن استعمالها معه هي:
يضيف هذا التابع مُنصتًا (listener) لحدثٍ من <code>InAppBrowser</code>. (متاح فقط عند ضبط الهدف عند القيمة <code>'_blank'</code>)  
* <code>addEventListener</code>
<syntaxhighlight lang="javascript">ref.addEventListener(eventname, callback);‎</syntaxhighlight>  
* <code>removeEventListener</code>
* '''ref''': يُشير إلى نافذة <code>InAppBrowser</code> ‏(‎InAppBrowser)  
*<code>close</code>
* '''eventname''': الحدث المُراد الإنصات إليه (سلسلة نصية)
*<code>show</code>
* '''loadstart''': يُطلق هذا الحدث عندما يبدأ <code>InAppBrowser</code> في تحميل عنوان URL.  
*<code>hide</code>
* '''loadstop''': يُطلق هذا الحدث عند انتهاء <code>InAppBrowser</code> من تحميل عنوان URL.  
* <code>executeScript</code>
* '''loaderror''': يُطلق هذا الحدث عندما يواجه <code>InAppBrowser</code> خطأً أثناء تحميل عنوان URL.  
* <code>insertCSS</code>
* '''exit''': يُطلق هذا الحدث عند إغلاق نافذة <code>InAppBrowser</code>.  
 
* '''callback''': الدالة التي ستنفذ عند إطلاق الحدث. يُمرّر إلى هذه الدالة كائن <code>InAppBrowserEvent</code> كمعاملٍ.  
==<code>InAppBrowser.addEventListener</code>==  
يضيف هذا التابع مُنصتًا (listener) لحدثٍ من <code>InAppBrowser</code>. (متاح فقط عند ضبط الخيار <code>target</code> إلى القيمة <code>'‎_blank'</code>).
<syntaxhighlight lang="javascript">ref.addEventListener(eventname, callback);‎</syntaxhighlight>المعاملات المُرَّرة إلى هذا التابع هي:
 
* <code>ref</code> : يشير إلى نافذة <code>InAppBrowser</code> ‏(‎InAppBrowser).
 
*<code>eventname</code>: سلسلة نصية تمثِّل الحدث المُراد ربط منصت به.
**<code>loadstart</code>: يُطلق هذا الحدث عندما يبدأ <code>InAppBrowser</code> في تحميل عنوان URL.
**<code>loadstop</code>: يُطلق هذا الحدث عند انتهاء <code>InAppBrowser</code> من تحميل عنوان URL.
**<code>loaderror</code>: يُطلق هذا الحدث عندما يواجه <code>InAppBrowser</code> خطأً أثناء تحميل عنوان URL.
**<code>exit</code>: يُطلق هذا الحدث عند إغلاق نافذة <code>InAppBrowser</code>.
** <code>beforeload</code>: يُطلق هذا الحدث عندما يقرر <code>InAppBrowser</code> إن كان سيُحمِّل عنوان URL أو لا (فقط عند تعيين الخيار <code>beforeload</code>)
** <code>message</code>: يُطلق هذا الحدث عندما يتلقى <code>InAppBrowser</code> رسالة من الصفحة التي تم تحميلها داخل [[Cordova/webviews|عارض]] <code>InAppBrowser</code> .
*<code>callback</code>: دالة رد النداء التي ستنفذ عند إطلاق الحدث. يُمرّر إليها الكائن <code>InAppBrowserEvent</code> كمعاملٍ.
إليك المثال التالي:<syntaxhighlight lang="javascript">var inAppBrowserRef;


== مثال ==
<syntaxhighlight lang="javascript">var inAppBrowserRef;
function showHelp(url) {
function showHelp(url) {
     var target = "_blank";
     var target = "_blank";
     var options = "location=yes,hidden=yes";
 
     var options = "location=yes,hidden=yes,beforeload=yes";
 
     inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
     inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
     inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
     inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
     inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
     inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
    inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);
    inAppBrowserRef.addEventListener('message', messageCallBack);
}
}
function loadStartCallBack() {
function loadStartCallBack() {
     $('#status-message').text("loading please wait ...");
     $('#status-message').text("loading please wait ...");
}
}
function loadStopCallBack() {
function loadStopCallBack() {
     if (inAppBrowserRef != undefined) {
     if (inAppBrowserRef != undefined) {
         inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
         inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
        inAppBrowserRef.executeScript({ code: "\
            var message = 'this is the message';\
            var messageObj = {my_message: message};\
            var stringifiedMessageObj = JSON.stringify(messageObj);\
            webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);"
        });
         $('#status-message').text("");
         $('#status-message').text("");
         inAppBrowserRef.show();
         inAppBrowserRef.show();
     }
     }
}
}
function loadErrorCallBack(params) {
function loadErrorCallBack(params) {
     $('#status-message').text("");
     $('#status-message').text("");
     var scriptErrorMesssage =
     var scriptErrorMesssage =
       "alert('Sorry we cannot open that page. Message from the server is : "
       "alert('Sorry we cannot open that page. Message from the server is : "
       + params.message + "');"
       + params.message + "');"
     inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
     inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
     inAppBrowserRef.close();
     inAppBrowserRef.close();
     inAppBrowserRef = undefined;
     inAppBrowserRef = undefined;
}
}
function executeScriptCallBack(params) {
function executeScriptCallBack(params) {
     if (params[0] == null) {
     if (params[0] == null) {
         $('#status-message').text(
         $('#status-message').text(
           "Sorry we couldn't open that page. Message from the server is : '"
           "Sorry we couldn't open that page. Message from the server is : '"
           + params.message + "'");
           + params.message + "'");
     }
     }
}</syntaxhighlight>  
 
=== خاصيات InAppBrowserEvent ===  
}
* '''type''': اسم الحدث، والذي يساوي إمّا <code>loadstart</code> أو <code>loadstop</code> أو <code>loaderror</code> أو <code>exit</code>. ((سلسلة نصية)
 
* '''url''': العنوان الذي تم تحميله. (سلسلة نصية)
function beforeloadCallBack(params, callback) {
* '''code''': رمز الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث <code>loaderror</code>. ((عدد)
 
* '''message''': رسالة الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث <code>loaderror</code>. (سلسلة نصية)  
    if (params.url.startsWith("http://www.example.com/")) {
=== المنصات المدعومة ===
 
        // Load this URL in the inAppBrowser.
        callback(params.url);
    } else {
 
        // The callback is not invoked, so the page will not be loaded.
        $('#status-message').text("This browser only opens pages on http://www.example.com/");
    }
 
}
 
function messageCallBack(params){
    $('#status-message').text("message received: "+params.data.my_message);
}</syntaxhighlight>  
=== خاصيات الكائن <code>InAppBrowserEvent</code> ===
الخاصيات المتاحة لاستعمالها مع الكائن <code>InAppBrowserEvent</code> هي:
* <code>type</code>: سلسلة نصية تمثِّل اسم الحدث، والذي يساوي إمّا <code>loadstart</code> أو <code>loadstop</code> أو <code>loaderror</code> أو <code>exit</code>.  
* <code>url</code>: سلسلة نصية تشير إلى العنوان الذي تم تحميله.  
* <code>code</code>: عدد يمثِّل رمز الخطأ. لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث <code>loaderror</code>.  
* <code>message</code>: سلسلة نصية تمثِّل رسالة الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث <code>loaderror</code>.  
* <code>data</code>: محتويات الرسالة، لا تعمل إلا في حال تعيين <code>message</code>. وهي كائن JSON (سلسلة نصية).
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
سطر 188: سطر 261:
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  


في هذه المنصات، لا يُطلق الحدثان <code>loadstart</code> و <code>loaderror</code>.  
في هذه المنصات، لا تُطلق الأحداث <code>loadstart</code> و <code>loaderror</code> و <code>message</code>.  
=== مثال سريع ===  
 
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
=== ملاحظات خاصة بويندوز ===
في هذه المنصة، لا يُطلق الحدث <code>message</code>.
 
إليك مثالا سريعا عن التابع <code>addEventListener</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstart', function(event) { alert(event.url); });‎</syntaxhighlight>  
ref.addEventListener('loadstart', function(event) { alert(event.url); });‎</syntaxhighlight>  


==InAppBrowser.removeEventListener==  
==<code>InAppBrowser.removeEventListener</code>==  
يزيل هذا التابع مُنصِتا لحدثٍ من <code>InAppBrowser</code>. (متاح فقط عند ضبط الهدف عند القيمة <code>'_blank'</code>)
يزيل هذا التابع مُنصِتا لحدثٍ من أحداث <code>InAppBrowser</code>. وهو متاح فقط عند ضبط الخيار <code>target</code> عند القيمة <code>'‎_blank'</code>.
<syntaxhighlight lang="javascript">ref.removeEventListener(eventname, callback);‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.removeEventListener(eventname, callback);‎</syntaxhighlight>المعاملات المُرَّرة إلى هذا التابع هي:
* '''ref''': تُشير إلى النافذة <code>InAppBrowser</code>. (InAppBrowser)
 
* '''eventname''': الحدث المُراد التوقف عن الإنصات له. (سلسلة نصية)
* <code>ref</code>:يشير إلى النافذة <code>InAppBrowser</code>.
* '''loadstart''': يُطلق هذا الحدث عندما يبدأ <code>InAppBrowser</code> في تحميل عنوان URL.  
 
* '''loadstop''': يُطلق هذا الحدث عند انتهاء <code>InAppBrowser</code> من تحميل عنوان URL.  
*<code>eventname</code>: سلسلة نصية تمثل الحدثَ المُراد التوقف عن الإنصات له.
* '''loaderror''': يُطلق هذا الحدث عندما يواجه <code>InAppBrowser</code> خطأ أثناء تحميل عنوان URL.  
**<code>loadstart</code>: يُطلق هذا الحدث عندما يبدأ <code>InAppBrowser</code> في تحميل عنوان URL.
* '''exit''': يُطلق هذا الحدث عند إغلاق نافذةِ <code>InAppBrowser</code>.  
**<code>loadstop</code>: يُطلق هذا الحدث عند انتهاء <code>InAppBrowser</code> من تحميل عنوان URL.
* '''callback''': الدالة التي سيتم تنفيذها عند إطلاق الحدث. يُمرّر إلى هذه الدالة كائنٌ <code>InAppBrowserEvent</code>.  
**<code>loaderror</code>: يُطلق هذا الحدث عندما يواجه <code>InAppBrowser</code> خطأ أثناء تحميل عنوان URL.
=== المنصات المدعومة ===
**<code>exit</code>: يُطلق هذا الحدث عند إغلاق نافذةِ <code>InAppBrowser</code>.
** <code>message</code>: يُطلق هذا الحدث عندما يتلقى <code>InAppBrowser</code> رسالة من الصفحة التي تم تحميلها داخل [[Cordova/webviews|عارض]] <code>InAppBrowser</code> .
*<code>callback</code>: دالة رد النداء التي سيتم تنفيذها عند إطلاق الحدث والتي سيُمرّر إليها الكائنٌ <code>InAppBrowserEvent</code>.
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
إليك المثال التالي عن استعمال التابع <code>removeEventListener</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
var myCallback = function(event) { alert(event.url); }
var myCallback = function(event) { alert(event.url); }
ref.addEventListener('loadstart', myCallback);
ref.addEventListener('loadstart', myCallback);
ref.removeEventListener('loadstart', myCallback);</syntaxhighlight>  
ref.removeEventListener('loadstart', myCallback);
</syntaxhighlight>  


==InAppBrowser.close==  
==<code>InAppBrowser.close</code>==  
يغلق هذا التابع نافذة <code>InAppBrowser</code>.  
يغلق هذا التابع نافذة <code>InAppBrowser</code>.  
<syntaxhighlight lang="javascript">ref.close();‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.close();‎</syntaxhighlight>المتغير <code>ref</code> يُشير إلى نافذة <code>InAppBrowser</code> ‏(InAppBrowser).
* '''ref''': تشيرُ إلى نافذة <code>InAppBrowser</code> ‏(InAppBrowser)  
 
=== المنصات المدعومة ===
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
مثال عن استعمال التابع <code>close</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.close();‎</syntaxhighlight>  
ref.close();‎</syntaxhighlight>  


==InAppBrowser.show==  
==<code>InAppBrowser.show</code>==  
يظهر هذا التابع نافذة InAppBrowser فُتِحت مخفية. استدعاء هذا التابع لن يكون له أي تأثير إن كان InAppBrowser مرئيًا بالفعل.  
يُظهر هذا التابع نافذة <code>InAppBrowser</code> فُتِحت وهي مخفية. استدعاء هذا التابع لن يكون له أي تأثير إن كانت نافذة <code>InAppBrowser</code> مرئيًةً.  
<syntaxhighlight lang="javascript">ref.show();‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.show();‎</syntaxhighlight>المتغير <code>ref</code> يُشير إلى نافذة <code>InAppBrowser</code>.
* '''ref''': يُشير إلى نافذة InAppBrowser ‏(<code>InAppBrowser</code>)
 
=== المنصات المدعومة ===
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
الق نظرة على المثال التالي:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'hidden=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'hidden=yes');
// ...بعد برهة من الزمن
// some time later...
ref.show();‎</syntaxhighlight>  
ref.show();‎</syntaxhighlight>  


==InAppBrowser.hide==  
==<code>InAppBrowser.hide</code>==  
يُخفي هذا التابع نافذة InAppBrowser. استدعاء هذا التابع ليس له أي تأثير إن كان InAppBrowser مخفيًا مسبقاً.  
يُخفي هذا التابع نافذة <code>InAppBrowser</code>. استدعاء هذا التابع ليس له أي تأثير إن كانت نافذة <code>InAppBrowser</code> مخفيًةً مسبقًا.  
<syntaxhighlight lang="javascript">ref.hide();‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.hide();‎</syntaxhighlight>المتغير <code>ref</code> يُشير إلى نافذة <code>InAppBrowser</code>.
* '''ref''': يُشير إلى نافذة InAppBrowser ‏(<code>InAppBrowser</code>)
 
=== المنصات المدعومة ===
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
إليك المثال التالي:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank');
// ...بعد بُرهة
// some time later...
ref.hide();‎</syntaxhighlight>  
ref.hide();‎</syntaxhighlight>  


==InAppBrowser.executeScript==  
==<code>InAppBrowser.executeScript</code>==  
يحقن (Injects) هذا التابع شيفرة [[JavaScript|جافااسكريبت]] في نافذة <code>InAppBrowser</code>. (متاح فقط عند ضبط الهدف [target] عند القيمة <code>'_blank'</code>)  
يحقن (Injects) هذا التابع شيفرة [[JavaScript|JavaScript]] في نافذة <code>InAppBrowser</code>. (متاح فقط عند ضبط الخيار <code>target</code> عند القيمة <code>'‎_blank'</code>).
<syntaxhighlight lang="javascript">ref.executeScript(details, callback);‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.executeScript(details, callback);‎</syntaxhighlight>المعاملات المُمرَّرة إلى هذا التابع هي:
* '''ref''': يُشير إلى النافذةة <code>InAppBrowser</code>. (InAppBrowser)
 
* '''injectDetails''': تفاصيل البرنامج النصي المراد تنفيذه، مع تحديد إما المفتاح <code>file</code> أو <code>code</code>. (كائن)
* <code>ref</code>: يشير إلى نافذة <code>InAppBrowser</code>.
* '''file''': عنوان النص المراد حقنُه.  
 
* '''code''': نص الشيفرة البرمجية المراد حقنُها.  
* <code>injectDetails</code>: كائن يمثل تفاصيل البرنامج النصي المراد تنفيذه، مع تحديد أحد المفتاحين <code>file</code> أو <code>code</code>.
* '''callback''': الدالة التي سُتنفّذ بعد حقن شيفرة [[JavaScript|جافااسكريبت]].  
** <code>file</code>: عنوان النص المراد حقنُه.  
* إن كان البرنامج النصي المحقون من النوع <code>code</code>، فسُينفّذ رد النداء مع إعطائه معاملًا واحدًا، والذي هو القيمة التي يُعيدها البرنامج النصي، مُغلّفةً في مصفوفة (<code>Array</code>). بالنسبة للنصوص النصية متعددة الأسطر، فالقيمة ستكون هي قيمة آخر تعبير (statement)، أو آخر تعبير مُقيّمٍ.  
** <code>code</code>: نص الشيفرة البرمجية المراد حقنُها.  
=== المنصات المدعومة ===
* <code>callback</code>: دالة رد النداء التي ستُنفّذ بعد حقن شيفرة [[JavaScript]].
** إن كان البرنامج النصي المحقون من النوع <code>code</code>، فسُينفّذ رد النداء (callback) مع إعطائه معاملًا واحدًا، والذي يساوي القيمة التي يُعيدها البرنامج النصي مُغلّفةً في مصفوفةٍ (<code>Array</code>). بالنسبة للنصوص النصية متعددة الأسطر، فالقيمة ستساوي قيمة آخر تعليمة (statement)، أو آخر تعبير (expression) مُقيّمٍ.  
المنصات المدعومة هي:
*أندرويد  
*أندرويد  
*Browser  
*Browser  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
إليك مثال عن استعمال التابع <code>executeScript</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstop', function() {
ref.addEventListener('loadstop', function() {
     ref.executeScript({file: "myscript.js"});
     ref.executeScript({file: "myscript.js"});
});‎</syntaxhighlight>  
});‎</syntaxhighlight>  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
=== ملاحظات خاصة بالمتصفحات (Browsers) ===  
* لا تدعم هذه المنصة إلا المفتاح '''code'''.  
* لا تدعم هذه المنصة إلا المفتاح <code>code</code>.  
=== ملاحظات خاصة بمنصة ويندوز ===  
=== ملاحظات خاصة بمنصة ويندوز ===  


رجوعًا إلى [https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx MSDN docs]، لا يمكن للبرنامج النصي المستدعي أن يُعيد إلا القيم النصية فقط، وإلا فإن المعامل الذي سيُمرّر إلى '''callback''' سيساوي <code>[null]</code>.  
بحسَب [https://msdn.microsoft.com/en-us/library/windows.ui.xaml.controls.webview.invokescriptasync.aspx توثيق MSDN]، لا يمكن للبرنامج النصي المستدعى أن يُعيد إلا قيمًا نصيةً، وإلا فإنّ المعامل الذي سيُمرّر إلى رد النداء <code>callback</code> سيساوي <code>[null]</code>.  


==InAppBrowser.insertCSS==  
==<code>InAppBrowser.insertCSS</code>==  
يحقن هذا التابع أنماط CSS في نافذة <code>InAppBrowser</code>. (متاح فقط عند ضبط الهدف (target) عند القيمة <code>'_blank'</code>)  
يحقن هذا التابع شيفرة [[CSS]] في نافذة <code>InAppBrowser</code> (متاح فقط عند ضبط الخيار <code>target</code> عند القيمة <code>'‎_blank'</code>).
<syntaxhighlight lang="javascript">ref.insertCSS(details, callback);‎</syntaxhighlight>  
<syntaxhighlight lang="javascript">ref.insertCSS(details, callback);‎</syntaxhighlight>المتغير <code>ref</code> يُشير إلى نافذة <code>InAppBrowser</code>.
* '''ref''': يُشير إلى نافذة <code>InAppBrowser</code> ‏(InAppBrowser)
* <code>injectDetails</code>: كائن يمثِّل تفاصيل البرنامج النصي المُراد تشغيله، مع تحديد أحد المفتاحين <code>file</code> أو <code>code</code>.
* '''injectDetails''': تفاصيل البرنامج النصي المُراد تشغيله، مع تحديد إما المفتاح <code>file</code> أو <code>code</code>. (كائن)
** <code>file</code>: عنوان شيفرة الأنماط المراد حقنها.  
* '''file''': عنوان ورقة الأنماط المراد حقنها.  
** <code>code</code>: محتوى شيفرة الأنماط المُراد حقنها.  
* '''code''': نص ورقة الأنماط المُراد حقنها.  
* <code>callback</code>: الدالة التي ستُنفذ بعد حقن شيفرة [[CSS]].  
* '''callback''': الدالة التي ستُنفذ بعد حقن CSS.  
المنصات المدعومة هي:
=== المنصات المدعومة ===
*أندرويد  
*أندرويد  
*iOS  
*iOS  
*ويندوز  
*ويندوز  
=== مثال سريع ===
توضح الشيفرة التالية كيفية استعمال التابع <code>insertCSS</code>:<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
<syntaxhighlight lang="javascript">var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstop', function() {
ref.addEventListener('loadstop', function() {
     ref.insertCSS({file: "mystyles.css"});
     ref.insertCSS({file: "mystyles.css"});
});‎</syntaxhighlight>  
});‎</syntaxhighlight>
== مثال توضيحي ==


__
يمكنك استخدام هذه الإضافة لعرض صفحات توثيقٍ في تطبيقك. بحيث يمكن للمستخدمين عرض وثائق المساعدة عبر الإنترنت ثمَّ إغلاقها دون مغادرة التطبيق.


== عينة: عرض صفحات المساعدة مع InAppBrowser ==
في هذه الفقرة تجد بعض المقتطفات البرمجية التي توضح كيفية القيام بذلك.  
 
يمكنك استخدام هذه الإضافة لعرض صفحات توثيقٍ مفيدة في تطبيقك. يمكن للمستخدمين عرض وثائق المساعدة عبر الإنترنت ثم إغلاقها دون مغادرة التطبيق.
 
إليك بعض المقتطفات التي توضح كيفية القيام بذلك.
*[#give Give users a way to ask for help].
*[#load Load a help page].
*[#let Let users know that you're getting their page ready].
*[#show Show the help page].
*[#handle Handle page errors].  
=== منح المستخدمين طريقة لطلب المساعدة ===  
=== منح المستخدمين طريقة لطلب المساعدة ===  


هناك الكثير من الطرق لفعل هذا في تطبيقك. تُعد القوائم المنسدلة إحدى أبسط الطرق للقيام بذلك.  
هناك الكثير من الطرق لفعل هذا. وتُعد القوائم المنسدلة من أبسطها.  
<syntaxhighlight lang="javascript"><select id="help-select">
<syntaxhighlight lang="html"><select id="help-select">
     <option value="default">Need help?</option>
     <option value="default">Need help?</option>
     <option value="article">Show me a helpful article</option>
     <option value="article">Show me a helpful article</option>
سطر 319: سطر 386:
</select>‎</syntaxhighlight>  
</select>‎</syntaxhighlight>  


قم بتجميع اختيارات المستخدمين في الدالة <code>onDeviceReady</code> الخاصة بالصفحة، ثم أرسل عنوانًا (URL) مناسبًا لدالة مساعدة (helper functio) في أحد ملفات المكتبة المشتركة. اسم دالة المساعدة هو <code>showHelp()</code>، وسنكتب هذه الدالة فيم يلي.  
قم بتجميع اختيارات المستخدمين في دالة الصفحة <code>onDeviceReady</code>، ثم أرسل عنوانًا (URL) مناسبًا لدالة المساعدة (helper function) في أحد ملفات المكتبة المشتركة. اسم دالة المساعدة في هذا المثال هو <code>showHelp()</code>، والتي سنعرّفها في الفقرة التالية.  
<syntaxhighlight lang="javascript">$('#help-select').on('change', function (e) {
<syntaxhighlight lang="javascript">$('#help-select').on('change', function (e) {
     var url;
     var url;
     switch (this.value) {
     switch (this.value) {
         case "article":
         case "article":
             url = "https://cordova.apache.org/docs/en/latest/"
             url = "https://cordova.apache.org/docs/en/latest/"
                         + "reference/cordova-plugin-inappbrowser/index.html";
                         + "reference/cordova-plugin-inappbrowser/index.html";
             break;
             break;
         case "video":
         case "video":
             url = "https://youtu.be/F-GlVrTaeH0";
             url = "https://youtu.be/F-GlVrTaeH0";
             break;
             break;
         case "search":
         case "search":
             url = "https://www.google.com/#q=inAppBrowser+plugin";
             url = "https://www.google.com/#q=inAppBrowser+plugin";
             break;
             break;
     }
     }
     showHelp(url);
     showHelp(url);
});</syntaxhighlight>  
 
});</syntaxhighlight>  
=== تحميل صفحة المساعدة ===  
=== تحميل صفحة المساعدة ===  


سنستخدم الدالة <code>open</code> لتحميل صفحة المساعدة. سنضبط خاصية <code>hidden</code> عند القيمة <code>yes</code>، لكي نحرص على أن يُعرض المتصفح بعد تحميل محتوى الصفحة. بهذه الطريقة، لن يرى المستخدمون متصفحًا فارغًا أثناء انتظار ظهور المحتوى. عندما يُطلق الحدث <code>loadstop</code>، سنعرف متى تم تحميل المحتوى. سنتعامل مع هذا الحدث بعد قليل.  
سنستخدم الدالة <code>open</code> لتحميل صفحة المساعدة. وسنضبط الخاصية <code>hidden</code> إلى القيمة <code>yes</code>، لكي نحرص على أن يُعرَض المتصفح بعد تحميل محتوى الصفحة. فبهذه الطريقة، لن يرى المستخدمون متصفحًا فارغًا أثناء انتظار ظهور المحتوى. عندما يُطلق الحدث <code>loadstop</code>، سنعرف متى تم تحميل المحتوى (سنتعامل مع هذا الحدث بعد قليل).  
<syntaxhighlight lang="javascript">function showHelp(url) {
<syntaxhighlight lang="javascript">function showHelp(url) {
     var target = "_blank";
     var target = "_blank";
     var options = "location=yes,hidden=yes";
     var options = "location=yes,hidden=yes";
     inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
     inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);
     inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);
     inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
     inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);
     inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
     inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);
}</syntaxhighlight>  
 
}</syntaxhighlight>  
=== إعلام المستخدمين بجاهزية صفحتهم ===  
=== إعلام المستخدمين بجاهزية صفحتهم ===  


نظرًا لكون المتصفح لا يظهر على الفور، يمكننا استخدام الحدث <code>loadstart</code> لعرض رسالة الحالة، أو شريط التقدم (progress bar)، أو أي مؤشرٍ آخر. هذا يؤكد للمستخدمين أن المحتوى في خضمّ التحميل.  
لا يظهر المتصفح على الفور، لذلك سنستخدم الحدث <code>loadstart</code> لعرض رسالة الحالة (status message)، أو شريط التقدم (progress bar)، أو أي مؤشرٍ آخر. هذا يؤكد للمستخدمين أن المحتوى في خضمِّ التحميل.  
<syntaxhighlight lang="javascript">function loadStartCallBack() {
<syntaxhighlight lang="javascript">function loadStartCallBack() {
     $('#status-message').text("loading please wait ...");
     $('#status-message').text("loading please wait ...");
سطر 355: سطر 436:
=== عرض صفحة المساعدة ===  
=== عرض صفحة المساعدة ===  


عندما يُطلق الحدث <code>loadstopcallback</code>، نعلم أن المحتوى قد حُمِّل، وحينها يمكننا إظهار المتصفح. هذه الحيلة يمكن أن تخلق انطباعًا بتُحسّن الأداء. والحقيقة هي أنه، سواء أعرضت المتصفح قبل تحميل المحتوى أم لا، فإن وقت التحميل لن يتغير.  
عندما يُطلق الحدث <code>loadstopcallback</code>، نعلم أن المحتوى قد حُمِّل، وحينها يمكننا إظهار المتصفح. هذه الحيلة ستخلق انطباعًا لدى المستخدم بسرعة التحميل. والحقيقة هي أنه، سواء أعرضت المتصفح قبل تحميل المحتوى أم لا، فإنّ وقت التحميل لن يتغير.  
<syntaxhighlight lang="javascript">function loadStopCallBack() {
<syntaxhighlight lang="javascript">function loadStopCallBack() {
     if (inAppBrowserRef != undefined) {
     if (inAppBrowserRef != undefined) {
         inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
         inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
         $('#status-message').text("");
         $('#status-message').text("");
         inAppBrowserRef.show();
         inAppBrowserRef.show();
     }
     }
}‎</syntaxhighlight>


ربما لاحظت استدعاء الدالة <code>insertCSS</code>. هذا لا يخدم أي غرض معين في مسعانا. ولكنه يعطيك فكرة عن كيفية استخدامها. في هذه الحالة، سنتأكد فقط من أنّ حجم خط صفحاتك يساوي قيمة معينة. يمكنك استخدام هذه الدالة لإدراج أنماط CSS التي تريد. يمكنك حتى الإشارة إلى ملف CSS في مشروعك.  
}</syntaxhighlight>
 
ربما لاحظت استدعاء الدالة <code>insertCSS</code>. هذا لا يخدم أي غرض معين في مثالنا هذا. ولكنه يعطيك فكرة عن كيفية استخدامها. في هذه الحالة، سنتأكد فقط من أنّ حجم خط صفحاتك يساوي قيمة معينة. يمكنك استخدام هذه الدالة لإدراج أنماط [[CSS]] التي تريد. ويمكنك حتى الإشارة إلى ملف CSS في مشروعك.  
=== معالجة أخطاء الصفحة ===  
=== معالجة أخطاء الصفحة ===  


في بعض الأحيان، لا تعود الصفحة المراد تحميلها مُتاحة، أو قد يكون هناك خطأ في البرنامج النصي، أو قد لا يملك المستخدم يفتقر إذن الدخول إلى موردٍ ما. التعامل مع هذه الأوضاع، وطريقة ذلك متروكة لك ولتصميمك. يمكنك ترك المتصفح يعرض رسالة خطأ، أو يمكنك عرضها بطريقة أخرى.  
في بعض الأحيان، لا تكون الصفحة المراد تحميلها مُتاحةً، أو قد يكون هناك خطأ في البرنامج النصي، أو قد لا يملك المستخدم إذن الدخول إلى موردٍ ما. التعامل مع هذه الأوضاع، وطريقة ذلك متروكة لك ولتصميمك. يمكنك ترك المتصفح يعرض رسالة خطأ، أو يمكنك عرضها بطريقة أخرى.  


سنحاول إظهار الخطأ في مربعٍ يعرض رسالة. يمكننا القيام بذلك عن طريق حقن برنامج نصي يستدعي الدالة <code>alert</code>. المشكلة في هذا أنه لن يعمل على المتصفحات في الأجهزة التي تستخدم ويندوز، لذا سيتعين علينا التحقق من معامل دالة رد النداء <code>executeScript</code> لمعرفة ما إذا كانت المحاولة ناجحة. إذا لم ينجح الأمر، فسنكتفي نعرض رسالة الخطأ في وسم <code><div> على الصفحة.
سنحاول إظهار الخطأ في مربعٍ يعرض رسالة. يمكننا القيام بذلك عن طريق حقن برنامج نصي يستدعي الدالة <code>alert</code>. المشكلة في هذا أنه لن يعمل على متصفحات ويندوز، لذا سيتعين علينا التحقق من قيمة معامل دالة رد النداء <code>executeScript</code> لمعرفة ما إذا كانت المحاولة ناجحة. إذا لم ينجح الأمر، فسنكتفي بعرض رسالة الخطأ في وسم <code><nowiki><div></nowiki></code> داخل الصفحة:
<syntaxhighlight lang="javascript">function loadErrorCallBack(params) {
<syntaxhighlight lang="javascript">function loadErrorCallBack(params) {
     $('#status-message').text("");
     $('#status-message').text("");
     var scriptErrorMesssage =
     var scriptErrorMesssage =
       "alert('Sorry we cannot open that page. Message from the server is : "
       "alert('Sorry we cannot open that page. Message from the server is : "
       + params.message + "');"
       + params.message + "');"
     inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
     inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);
     inAppBrowserRef.close();
     inAppBrowserRef.close();
     inAppBrowserRef = undefined;
     inAppBrowserRef = undefined;
}
}
function executeScriptCallBack(params) {
function executeScriptCallBack(params) {
     if (params[0] == null) {
     if (params[0] == null) {
         $('#status-message').text(
         $('#status-message').text(
           "Sorry we couldn't open that page. Message from the server is : '"
           "Sorry we couldn't open that page. Message from the server is : '"
           + params.message + "'");
           + params.message + "'");
     }
     }
}‎</syntaxhighlight>


}</syntaxhighlight><span></span>
== معلومات استخدام إضافية ==  
== معلومات استخدام إضافية ==  
=== العناوين المحلية (المصدر في حزمة التطبيق) ===  
=== العناوين المحلية (المصدر في حزمة التطبيق) ===  
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
iab.open('local-url.html');                  // loads in the Cordova WebView
iab.open('local-url.html');                  // يُحمّل في عارض كوردوفا
iab.open('local-url.html', '_self');        // loads in the Cordova WebView
iab.open('local-url.html', '_self');        // يُحمّل في عارض كوردوفا
iab.open('local-url.html', '_system');      // Security error: system browser, but url will not load (iOS)
iab.open('local-url.html', '_system');      // خطأ أمني: متصفح النظام
iab.open('local-url.html', '_blank');        // loads in the InAppBrowser
                                            // (iOS) ولكن لن يُحمّل العنوان
iab.open('local-url.html', 'random_string'); // loads in the InAppBrowser
iab.open('local-url.html', '_blank');        // InAppBrowser يُحمّل في
iab.open('local-url.html', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar‎</syntaxhighlight>  
iab.open('local-url.html', 'random_string'); // InAppBrowser يُحمّل في
=== محتوى المُدرج في اللائحة البيضاء ===  
iab.open('local-url.html', 'random_string', 'location=no'); // InAppBrowser يُحمّل في
                                                            // دون عرض شريط التصفح</syntaxhighlight>  
=== محتوى مُدرج في اللائحة البيضاء ===  
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
iab.open('http://whitelisted-url.com');                  // loads in the Cordova WebView
iab.open('http://whitelisted-url.com');                  // يُحمّل في عارض كوردوفا
iab.open('http://whitelisted-url.com', '_self');        // loads in the Cordova WebView
iab.open('http://whitelisted-url.com', '_self');        // يُحمّل في عارض كوردوفا
iab.open('http://whitelisted-url.com', '_system');      // loads in the system browser
iab.open('http://whitelisted-url.com', '_system');      // يُحمّل في متصفح النظام
iab.open('http://whitelisted-url.com', '_blank');        // loads in the InAppBrowser
iab.open('http://whitelisted-url.com', '_blank');        // InAppBrowser يُحمّل في
iab.open('http://whitelisted-url.com', 'random_string'); // loads in the InAppBrowser
iab.open('http://whitelisted-url.com', 'random_string'); // InAppBrowser يُحمّل في
iab.open('http://whitelisted-url.com', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar‎</syntaxhighlight>  
iab.open('http://whitelisted-url.com', 'random_string', 'location=no'); // يُحمّل في
                                                // دون عرض شريط التصفح InAppBrowser </syntaxhighlight>  
=== العناوين غير المُدرجة في اللائحة البيضاء ===  
=== العناوين غير المُدرجة في اللائحة البيضاء ===  
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
<syntaxhighlight lang="javascript">var iab = cordova.InAppBrowser;
iab.open('http://url-that-fails-whitelist.com');                 // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com');             // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', '_self');         // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com', '_self');     //InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', '_system');       // loads in the system browser
iab.open('http://url-that-fails-whitelist.com', '_system'); // يُحمل في متصفح النظام
iab.open('http://url-that-fails-whitelist.com', '_blank');       // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com', '_blank');   // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', 'random_string'); // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com', 'random_string'); // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar‎</syntaxhighlight>
iab.open('http://url-that-fails-whitelist.com', 'random_string', 'location=no');  
// دون عرض شريط التصفح InAppBrowser يُحمّل في</syntaxhighlight>
 
== انظر أيضًا ==
* إضافة <nowiki/>[[Cordova/cordova plugin device|حالة الجهاز]]
* إضافة <nowiki/>[[Cordova/cordova plugin geolocation|تحديد الموقع الجغرافي]]
 
* إضافة <nowiki/>[[Cordova/cordova plugin file|الوصول إلى الملفات]]
 
* [[Cordova/plugins|دليل تطوير الإضافات في كوردوفا]]
 
==مصادر==
==مصادر==
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/index.html صفحة cordova-plugin-inappbrowser في توثيق كوردوفا الرسمي.]
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/index.html صفحة cordova-plugin-inappbrowser في توثيق كوردوفا الرسمي.]

المراجعة الحالية بتاريخ 19:30، 3 ديسمبر 2020

تساعد إضافة المتصفح الداخلي (cordova-plugin-inappbrowser) على عرض المقالات ومقاطع الفيديو وموارد الويب المفيدة داخل تطبيقك. كما تمُكن المستخدمين أيضًا من الاطلاع على صفحات الويب دون مغادرة التطبيق.

لمعرفة كيفية استخدام هذه الإضافة، اطلع على المثال التوضيحي في نهاية هذه الصفحة.

توفر هذه الإضافة مُتصفحًا يمكن عرضه عند استدعاء التابع cordova.InAppBrowser.open()‎.

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');

لقد تم تعريف التابع cordova.InAppBrowser.open()‎ ليكون بديلًا للدالة window.open()‎. يمكن لاستدعاءات الدالةwindow.open() ‎ الحالية أن تستخدم نافذةَ InAppBrowser عن طريق استبدال window.open كما هو موضح في المثال التالي:

window.open = cordova.InAppBrowser.open;

تتصرف النافذة InAppBrowser كمتصفح عادي، ولا يمكنها الوصول إلى الواجهات البرمجية لكوردوفا. لهذا السبب، يُنصَح باستخدام InAppBrowser إذا احتجت إلى تحميل محتوى خارجي (غير موثوق به)، بدلًا من تحميله في عارض كوردوفا الرئيسي. InAppBrowser ليس معنيًا باللوائح البيضاء، ولا يفتح روابط في متصفح النظام.

يوفر InAppBrowser بشكل افتراضي عناصر الواجهة الرسومية (GUI) للمستخدم (back, forward, done).

للتوافق مع الإصدارات القديمة، تربط هذه الإضافةُ الدالةَ window.open مع خطّاف. لكن يمكن أن يكون للخطّاف الذي رُبطَت فيه الدالة window.open تأثيرات جانبية غير مقصودة (خاصة إذا تم تضمين هذه الإضافة كارتباط لإضافة أخرى). سيُزال خطاف الدالة window.open في الإصدار الرئيسي مستقبلًا. إلى حين إزالة ذلك الخطاف من الإضافة، يمكن للتطبيقات استعادة السلوك الافتراضي يدويًا عبر تنفيذ الأمر التالي:

delete window.open // إعادة رد النداء إلى وضعه الافتراضي

على الرغم من أنَّ الدالة window.open موجودة في النطاق العام، إلا أنّ الكائن InAppBrowser لن يكون متوفرًا إلا بعد إطلاق الحدث deviceready.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log("window.open works well");
}

التثبيت

يمكنك تثبيت هذه الإضافة عبر الأمر التالي:

cordova plugin add cordova-plugin-inappbrowser‎

إن كنت تريد أن تُعرض جميع الصفحات المُحملة في تطبيقك في نافذة InAppBrowser، يمكنك ببساطة أن تربط الدالة window.open بخطاف أثناء التهيئة. إليك المثال التالي:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    window.open = cordova.InAppBrowser.open;
}

cordova.InAppBrowser.open

يفتح هذا التابع عنوانًا في نسخة جديدة (instance) من InAppBrowser، أو في نسخة من المتصفح الحالي، أو في متصفح النظام:

var ref = cordova.InAppBrowser.open(url, target, options);

المعاملات المُمرَّرة إلى هذه الدالة هي:

  • ref: يشير إلى النافذة InAppBrowser عندما يُضبَط المعامل target إلى القيمة '‎_blank'. ‏(InAppBrowser)
  • url: سلسلة نصية تمثِّل العنوان المراد تحميله. مرّر هذا المعامل إلى الدالةَ encodeURI()‎ إن كان العنوان يحتوي على محارف يونيكود.
  • target: سلسلة نصية تحدِّد المكان الذي سيُحمّل فيه العنوان. وهو معامل اختياري، قيمته الافتراضية تساوي ‎_self.
    • _self: يُفتح في عارض كوردوفا إن كان العنوان مُدرجًا في اللائحة البيضاء، وإلا فسيُفتح في نافذة InAppBrowser.
    • _blank: يُفتح في InAppBrowser.
    • _system: يفتح في متصفح النظام.
  • options: سلسلة نصية تحوي خيارات النافذة InAppBrowser. وهو معامل اختياري، وقيمته الافتراضية هي location=yes. يجب ألا تحتوي السلسلة النصية options على أية مسافة فارغة، ويجب أن تُفصل الأزواج اسم/قيمة (name/value) للميزات بفاصلة. كما أنّ أسماء الميزات غير حساسة لحالة الأحرف.

تدعم جميع المنصات الخيار التالي:

  • location: اضبط هذه الخاصية إلى القيمة yes أو no لإظهار شريط التصفح (location bar) في InAppBrowser أو إخفائه.

تدعم منصة أندرويد هذه الخيارات الإضافية:

  • hidden: اضبط هذا الخيار إلى القيمة yes لإنشاء المتصفح وتحميل الصفحة بدون إظهاره. يُطلق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة no (القيمة الافتراضية) لفتح المتصفح وتحميل الصفحة بشكل طبيعي.
  • beforeload: عين هذا الخيار لتمكين الحدث Beforeeload من تعديل الصفحات التي حُمِّلت فعليا في المتصفح. القيم المقبولة هي:
    • get: لاعتراض طلبات GET فقط
    • post: لاعتراض طلبات POST
    • yes: لاعتراض طلبات GET و POST معا. لاحظ أنّ طلبات POST غير مدعومة حاليًا وستُتجاهل (إذا قمت بتعيين القيمة beforeload = post، فسيؤدي ذلك إلى إطلاق خطأ).
  • cbeforeloadlearcache: اضبط هذا الخيار إلى القيمة yes لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط (cookie cache) في المتصفح قبل فتح النافذة الجديدة
  • clearsessioncache: اضبط هذا الخيار إلى القيمة yes لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط قبل فتح النافذة الجديدة
  • closebuttoncaption: أعطِ لهذا الخيار سلسلةً نصيةً لاستخدامها كتسميةٍ للزر بدلًا من الحرف X. تذكّر أنه سيكون عليك مراعاة الإعدادات اللغوية المحلية بنفسك.
  • closebuttoncolor: أعطِ لهذا الخيار سلسلةً نصيةً تمثل قيمة لونية ست عشرية (hex color) صالحة، مثل: ‎#00ff00، لأجل تغيير لون زر الإغلاق الافتراضي، سواءً كان نصًا، أو كان يساوي القيمة الافتراضية X. لا يكون لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار location إلى القيمة yes.
  • footer: اضبط هذا الخيار إلى القيمة yes لإظهار زر الإغلاق في أسفل النافذة بشكل مماثلٍ للزر Done في منصة iOS، سيظهر زر الإغلاق بشكل مماثلٍ لترويسة (header) النافذة، لذلك استخدم closebuttoncaption و closebuttoncolor لتعيين خصائصه.
  • footercolor: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل ‎#00ff00 أو ‎#CC00ff00 (#aarrggbb)‎، لتغيير لون تذييل (footer) النافذة الافتراضي. ليس لهذا الخيار تأثيرٌ إلا إن عيّن المُستخدم الخيارَ footer إلى القيمة yes.
  • hardwareback: اضبط هذا الخيار إلى القيمة yes لاستخدام زر الرجوع الخاص بالجهاز للرجوع للخلف إلى الصفحات الموجودة في تاريخ نافذة InAppBrowser (الصفحات التي جرى زيارتها من قبل). إذا لم تكن هناك صفحات سابقة، فسيتم إغلاق InAppBrowser. القيمة الافتراضية هي yes، إن كنت تريد أن تجعل زر الرجوع يغلق نافذة InAppBrowser، فعيّن هذا الخيار إلى القيمة no .
  • hidenavigationbuttons: اضبط هذا الخيار إلى القيمة yes لإخفاء أزرار التصفح (navigation buttons) على شريط التصفح (location toolbar)، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار location إلى القيمة yes. القيمة الافتراضية هي no.
  • hideurlbar: اضبط هذا الخيار إلى القيمة yes لإخفاء شريط العنوان من شريط التصفح، ليس لهذا الخيار تأثيرًا إلا إن كان المستخدم قد عيّن الخيار location إلى القيمة yes. القيمة الافتراضية هي no.
  • navigationbuttoncolor: أعطِ لهذا الخيار سلسلة نصية تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎#00ff00، لتغيير لون أزرار التصفح الافتراضي. ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيار location إلى القيمة yes، وكانت قيمة الخيار hidenavigationbuttons تخالف yes.
  • toolbarcolor: أعطِ لهذا الخيار سلسلة نصية تمثل لونًا ست عشريًا صالحًا، مثل: ‎#00ff00، لتغيير لون شريط الأدوات الافتراضي. ليس لهذا الخيار تأثيرًا إلا إن كان المستخدم قد عيّن الخيار location إلى القيمة yes.
  • lefttoright: اضبط هذا الخيار إلى القيمة yes لأجل تبديل مواضع أزرار التنقل وزر الإغلاق. على وجه التحديد، ستتحول أزرار التنقل إلى الزر الأيسر وينتقل زر الإغلاق إلى اليمين.
  • zoom: اضبط هذا الخيار إلى القيمة yes لعرض عناصر التحكم في الحجم في متصفح أندرويد، أو اضبطه إلى القيمة no إن أردت إخفاءها. القيمة الافتراضية هي yes.
  • mediaPlaybackRequiresUserAction: اضبط هذا الخيار إلى القيمة yes لمنع صوتيات أو فيديوها HTML5 من التشغيل التلقائي. القيمة الافتراضية هي no.
  • shouldPauseOnSuspend: اضبط هذا الخيار إلى القيمة yes لإيقاف عارض InAppBrowser أو استئنافه مع التطبيق، وذلك لإيقاف صوت الخلفية (قد يكون هذا ضروريًا لتجنب المشكلات التي تخص Google Play كما هو موضح في الصفحة CB-11013).
  • useWideViewPort: يحدِّد هذا الخيار ما إذا كان العارض سيدعم وسم HTML الوصفي "viewport"، أو أنّ عليه أن يستخدم إطار عرضٍ (viewport) واسعٍ. عندما يُعطَى هذا الخيار القيمة no، سيُعيّن عرض المخطط (layout) إلى قيمة العرض في العارض محسوبةً بوحدات بكسل مستقلة عن الجهاز المُستخدم (device-independent pixels). إن أُعطي هذا الخيار القيمة yes وكانت الصفحة تحتوي الوسم الوصفي viewport، فستُستخدَم قيمة العرض المحددة في الوسم. إن لم تحتوِ الصفحة على الوسم، أو لم تحدد قيمةً للعرض، فسيُستخدم إطار عرضٍ واسعٍ. القيمة الافتراضية هي yes.

تدعم منصة iOS الخيارات الإضافية التالية:

  • usewkwebview: اضبط هذا الخيار إلى القيمة yes لأجل استخدام محرك WKWebView في InappBrowser. احذف الخيار أو أو اضبطه إلى القيمة no لأجل استخدام UIWebView. ملاحظة: يتطلب استخدام usewkwebview=yes تثبيت إضافة محرك WKWebView في مشروع كوردوفا (مثل cordova-plugin-wkwebview أو cordova-plugin-ionic-webview).
  • hidden: اضبط هذا الخيار إلى القيمة yes لإنشاء المتصفح وتحميل الصفحة، ولكن دون إظهاره. سيُطلق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة no (الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.
  • beforeload: عين هذا الخيار لتمكين الحدث Beforeeload من تعديل الصفحات التي حُمِّلت فعليا في المتصفح. القيم المقبولة هي:
    • get: لاعتراض طلبات GET فقط
    • post: لاعتراض طلبات POST
    • yes: لاعتراض طلبات GET و POST معا. لاحظ أنّ طلبات POST غير مدعومة حاليًا وستُتجاهل (إذا قمت بتعيين القيمة beforeload = post، فسيؤدي ذلك إلى إطلاق خطأ).
  • clearcache: اضبط هذا الخيار إلى القيمة yes لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط (cookie cache) للمتصفح قبل فتح النافذة الجديدة
  • clearsessioncache: اضبط هذا الخيار إلى القيمة yes لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط قبل فتح النافذة الجديدة.
  • closebuttoncolor: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎#00ff00، لتغيير لون الزر Done الافتراضي. لا يُطبق هذا الإعداد إلا عند تفعيل شريط الأدوات.
  • cleardata: اضبط هذا الخيار إلى القيمة yes لمسح كامل التخزين المحلي للمتصفح (ملفات تعريف الارتباط، وتخزين HTML5 المحلي، و IndexedDB ...) قبل فتح النافذة الجديدة.
  • closebuttoncaption: أعطِ لهذا الخيار سلسلةً نصيةً لاستخدامها كتسميةِ للزر Done. تذكر أن عليك مراعاة الإعدادات اللغوية المحلية بنفسك.
  • disallowoverscroll: يُضبط هذا الخيار إلى القيمة yes أو no (القيمة الافتراضية هي no) لتشغيل أو إيقاف الخاصية UIWebViewBounce.
  • hidenavigationbuttons: اضبط هذا الخيار إلى القيمة yes أو no لإظهار أزرار التصفح (navigation buttons) في شريط الأدوات أو إخفائها (القيمة الافتراضية هي no). لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
  • navigationbuttoncolor: أعطِ لهذا الخيار سلسلةًً نصيةًً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎#00ff00، لتغيير اللون الافتراضي. لا يُطبّق هذا الخيار إلا عند إظهار أزرار التصفح.
  • toolbar: أعطِ لهذا الخيار القيمة yes أو no لإظهار شريط الأدوات أو إخفائه في نافذة InAppBrowser (القيمة الافتراضية هي yes).
  • toolbarcolor: أعطِ لهذا الخيار سلسلةً نصيةً تمثل لونًا ست عشريًا (hex color) صالحًا، مثل: ‎#00ff00، لتغيير اللون الافتراضي لشريط الأدوات. لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
  • toolbartranslucent: أعطِ لهذا الخيار القيمة yes أو no لجعل شريط الأدوات شبه شفاف (translucent). القيمة الافتراضية هي yes. لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.
  • lefttoright: اضبط هذا الخيار إلى القيمة yes لأجل تبديل مواضع أزرار التنقل وزر الإغلاق. على وجه التحديد، ستتحول أزرار التنقل إلى الزر الأيسر وينتقل زر الإغلاق إلى اليمين.
  • enableViewportScale: اضبط هذا الخيار إلى القيمة yes أو no لمنع تعديل حجم إطار العرض (viewport) عبر الوسم <meta> الوصفي. القيمة الافتراضية هي no.
  • mediaPlaybackRequiresUserAction: اضبط هذا الخيار إلى القيمة yes لمنع صوتيات أو فيديوهات HTML5 من التشغيل التلقائي. القيمة الافتراضية هي no.
  • allowInlineMediaPlayback: اضبط هذا الخيار إلى القيمة yes أو no للسماح بتشغيل وسائط HTML5 المُدرجة على السطر (in-line)، وعرضها في نافذة المتصفح بدلًا من واجهة تشغيلٍ خاصةٍ بالجهاز. يجب أن يشتمل عنصر video في HTML على الخاصية webkit-playsinline. القيمة الافتراضية هي no.
  • keyboardDisplayRequiresUserAction: اضبط هذا الخيار إلى القيمة yes أو no لفتح لوحة المفاتيح عندما تتلقى عناصر النموذج (form) التركيز (focus) عبر استدعاء دالة جافاسكريبت focus()‎. القيمة الافتراضية هي yes.
  • suppressesIncrementalRendering: اضبط هذا الخيار إلى القيمة yes أو no للانتظار حتى يتم استلام كل محتوى إطار العرض الجديد قبل عرضه. القيمة الافتراضية هي no.
  • presentationstyle: اعط لهذا الخيار القيمة pagesheet أو formsheet أو fullscreen لتعيين نمط العرض. القيمة الافتراضية هي fullscreen.
  • transitionstyle: اعط لهذا الخيار القيمة fliphorizontal أو crossdissolve أو coververtical لتعيين نمط الانتقال. القيمة الافتراضية هي coververtical.
  • toolbarposition: اضبط هذا الخيار إلى القيمة top أو bottom لجعل شريط الأدوات في أعلى النافذة أو أسفلها. القيمة الافتراضية هي bottom.
  • hidespinner: اضبط هذا الخيار إلى القيمة yes أو no لتغيير رؤية (visibility) مؤشر التحميل. القيمة الافتراضية هي no.

تدعم منصة ويندوز الخيارات الإضافية التالية:

  • hidden: اضبط هذا الخيار إلى القيمة yes لإنشاء المتصفح وتحميل الصفحة دون إظهاره. يُطلَق الحدث loadstop عند اكتمال التحميل. احذف هذا الخيار أو اضبطه إلى القيمة no (القيمة الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.
  • hardwareback: يعمل هذا الخيار بطريقة مشابهة لعمله على منصة أندرويد.
  • fullscreen: اضبط هذا الخيار إلى القيمة yes لإنشاء متصفحٍ وعرضه بدون إحاطته بحدود. يرجى ملاحظة أنه إذا تم تحديد الخيار location=no أيضًا، فلن يتوافر للمستخدم أي تحكم (control) لإغلاق النافذة IAB.

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • OSX
  • ويندوز

مثال عن استعمال cordova.InAppBrowser.open:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
var ref2 = cordova.InAppBrowser.open(encodeURI('http://ja.m.wikipedia.org/wiki/ハングル'), '_blank', 'location=yes');

ملاحظات خاصة بمنصة OSX

في الوقت الحالي، القيمة الوحيدة المدعومة للمعامل target في منصة OSX هي ‎_system.

لم يتم بعدُ تقديم الهدفين ‎_blank و ‎_self، وسيُتاجهلان بصمت.

ملاحظات خاصة بالمتصفحات (Browsers)

  • تُقدِّم هذه الإضافة عبر الإطار الذكي iframe،
  • لم يتم تقديم تاريخ التصفح (Navigation history) بعدُ (أي الزِّرين back و forward في شريط التصفح LocationBar).

الكائن InAppBrowser

يمثل الكائن المُعاد من استدعاء التابع cordova.InAppBrowser.open عند تعيين المعامل target إلى القيمة '‎_blank'.

التوابع التي يمكن استعمالها معه هي:

  • addEventListener
  • removeEventListener
  • close
  • show
  • hide
  • executeScript
  • insertCSS

InAppBrowser.addEventListener

يضيف هذا التابع مُنصتًا (listener) لحدثٍ من InAppBrowser. (متاح فقط عند ضبط الخيار target إلى القيمة '‎_blank').

ref.addEventListener(eventname, callback);

المعاملات المُرَّرة إلى هذا التابع هي:

  • ref : يشير إلى نافذة InAppBrowser ‏(‎InAppBrowser).
  • eventname: سلسلة نصية تمثِّل الحدث المُراد ربط منصت به.
    • loadstart: يُطلق هذا الحدث عندما يبدأ InAppBrowser في تحميل عنوان URL.
    • loadstop: يُطلق هذا الحدث عند انتهاء InAppBrowser من تحميل عنوان URL.
    • loaderror: يُطلق هذا الحدث عندما يواجه InAppBrowser خطأً أثناء تحميل عنوان URL.
    • exit: يُطلق هذا الحدث عند إغلاق نافذة InAppBrowser.
    • beforeload: يُطلق هذا الحدث عندما يقرر InAppBrowser إن كان سيُحمِّل عنوان URL أو لا (فقط عند تعيين الخيار beforeload)
    • message: يُطلق هذا الحدث عندما يتلقى InAppBrowser رسالة من الصفحة التي تم تحميلها داخل عارض InAppBrowser .
  • callback: دالة رد النداء التي ستنفذ عند إطلاق الحدث. يُمرّر إليها الكائن InAppBrowserEvent كمعاملٍ.

إليك المثال التالي:

var inAppBrowserRef;

function showHelp(url) {

    var target = "_blank";

    var options = "location=yes,hidden=yes,beforeload=yes";

    inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);

    inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);

    inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);

    inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);

    inAppBrowserRef.addEventListener('beforeload', beforeloadCallBack);

    inAppBrowserRef.addEventListener('message', messageCallBack);
}

function loadStartCallBack() {

    $('#status-message').text("loading please wait ...");

}

function loadStopCallBack() {

    if (inAppBrowserRef != undefined) {

        inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });

        inAppBrowserRef.executeScript({ code: "\
            var message = 'this is the message';\
            var messageObj = {my_message: message};\
            var stringifiedMessageObj = JSON.stringify(messageObj);\
            webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);"
        });

        $('#status-message').text("");

        inAppBrowserRef.show();
    }

}

function loadErrorCallBack(params) {

    $('#status-message').text("");

    var scriptErrorMesssage =
       "alert('Sorry we cannot open that page. Message from the server is : "
       + params.message + "');"

    inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);

    inAppBrowserRef.close();

    inAppBrowserRef = undefined;

}

function executeScriptCallBack(params) {

    if (params[0] == null) {

        $('#status-message').text(
           "Sorry we couldn't open that page. Message from the server is : '"
           + params.message + "'");
    }

}

function beforeloadCallBack(params, callback) {

    if (params.url.startsWith("http://www.example.com/")) {

        // Load this URL in the inAppBrowser.
        callback(params.url);
    } else {

        // The callback is not invoked, so the page will not be loaded.
        $('#status-message').text("This browser only opens pages on http://www.example.com/");
    }

}

function messageCallBack(params){
    $('#status-message').text("message received: "+params.data.my_message);
}

خاصيات الكائن InAppBrowserEvent

الخاصيات المتاحة لاستعمالها مع الكائن InAppBrowserEvent هي:

  • type: سلسلة نصية تمثِّل اسم الحدث، والذي يساوي إمّا loadstart أو loadstop أو loaderror أو exit.
  • url: سلسلة نصية تشير إلى العنوان الذي تم تحميله.
  • code: عدد يمثِّل رمز الخطأ. لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث loaderror.
  • message: سلسلة نصية تمثِّل رسالة الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدث loaderror.
  • data: محتويات الرسالة، لا تعمل إلا في حال تعيين message. وهي كائن JSON (سلسلة نصية).

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • ويندوز
  • OSX

ملاحظات خاصة بالمتصفحات (Browsers)

في هذه المنصات، لا تُطلق الأحداث loadstart و loaderror و message.

ملاحظات خاصة بويندوز

في هذه المنصة، لا يُطلق الحدث message.

إليك مثالا سريعا عن التابع addEventListener:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstart', function(event) { alert(event.url); });

InAppBrowser.removeEventListener

يزيل هذا التابع مُنصِتا لحدثٍ من أحداث InAppBrowser. وهو متاح فقط عند ضبط الخيار target عند القيمة '‎_blank'.

ref.removeEventListener(eventname, callback);

المعاملات المُرَّرة إلى هذا التابع هي:

  • ref:يشير إلى النافذة InAppBrowser.
  • eventname: سلسلة نصية تمثل الحدثَ المُراد التوقف عن الإنصات له.
    • loadstart: يُطلق هذا الحدث عندما يبدأ InAppBrowser في تحميل عنوان URL.
    • loadstop: يُطلق هذا الحدث عند انتهاء InAppBrowser من تحميل عنوان URL.
    • loaderror: يُطلق هذا الحدث عندما يواجه InAppBrowser خطأ أثناء تحميل عنوان URL.
    • exit: يُطلق هذا الحدث عند إغلاق نافذةِ InAppBrowser.
    • message: يُطلق هذا الحدث عندما يتلقى InAppBrowser رسالة من الصفحة التي تم تحميلها داخل عارض InAppBrowser .
  • callback: دالة رد النداء التي سيتم تنفيذها عند إطلاق الحدث والتي سيُمرّر إليها الكائنٌ InAppBrowserEvent.

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • ويندوز

إليك المثال التالي عن استعمال التابع removeEventListener:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
var myCallback = function(event) { alert(event.url); }
ref.addEventListener('loadstart', myCallback);
ref.removeEventListener('loadstart', myCallback);

InAppBrowser.close

يغلق هذا التابع نافذة InAppBrowser.

ref.close();

المتغير ref يُشير إلى نافذة InAppBrowser ‏(InAppBrowser).

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • ويندوز

مثال عن استعمال التابع close:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.close();

InAppBrowser.show

يُظهر هذا التابع نافذة InAppBrowser فُتِحت وهي مخفية. استدعاء هذا التابع لن يكون له أي تأثير إن كانت نافذة InAppBrowser مرئيًةً.

ref.show();

المتغير ref يُشير إلى نافذة InAppBrowser.

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • ويندوز

الق نظرة على المثال التالي:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'hidden=yes');
// ...بعد برهة من الزمن
ref.show();

InAppBrowser.hide

يُخفي هذا التابع نافذة InAppBrowser. استدعاء هذا التابع ليس له أي تأثير إن كانت نافذة InAppBrowser مخفيًةً مسبقًا.

ref.hide();

المتغير ref يُشير إلى نافذة InAppBrowser.

المنصات المدعومة هي:

  • أندرويد
  • iOS
  • ويندوز

إليك المثال التالي:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank');
// ...بعد بُرهة
ref.hide();

InAppBrowser.executeScript

يحقن (Injects) هذا التابع شيفرة JavaScript في نافذة InAppBrowser. (متاح فقط عند ضبط الخيار target عند القيمة '‎_blank').

ref.executeScript(details, callback);

المعاملات المُمرَّرة إلى هذا التابع هي:

  • ref: يشير إلى نافذة InAppBrowser.‏
  • injectDetails: كائن يمثل تفاصيل البرنامج النصي المراد تنفيذه، مع تحديد أحد المفتاحين file أو code.
    • file: عنوان النص المراد حقنُه.
    • code: نص الشيفرة البرمجية المراد حقنُها.
  • callback: دالة رد النداء التي ستُنفّذ بعد حقن شيفرة JavaScript.
    • إن كان البرنامج النصي المحقون من النوع code، فسُينفّذ رد النداء (callback) مع إعطائه معاملًا واحدًا، والذي يساوي القيمة التي يُعيدها البرنامج النصي مُغلّفةً في مصفوفةٍ (Array). بالنسبة للنصوص النصية متعددة الأسطر، فالقيمة ستساوي قيمة آخر تعليمة (statement)، أو آخر تعبير (expression) مُقيّمٍ.

المنصات المدعومة هي:

  • أندرويد
  • Browser
  • iOS
  • ويندوز

إليك مثال عن استعمال التابع executeScript:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstop', function() {
    ref.executeScript({file: "myscript.js"});
});

ملاحظات خاصة بالمتصفحات (Browsers)

  • لا تدعم هذه المنصة إلا المفتاح code.

ملاحظات خاصة بمنصة ويندوز

بحسَب توثيق MSDN، لا يمكن للبرنامج النصي المستدعى أن يُعيد إلا قيمًا نصيةً، وإلا فإنّ المعامل الذي سيُمرّر إلى رد النداء callback سيساوي [null].

InAppBrowser.insertCSS

يحقن هذا التابع شيفرة CSS في نافذة InAppBrowser (متاح فقط عند ضبط الخيار target عند القيمة '‎_blank').

ref.insertCSS(details, callback);

المتغير ref يُشير إلى نافذة InAppBrowser.

  • injectDetails: كائن يمثِّل تفاصيل البرنامج النصي المُراد تشغيله، مع تحديد أحد المفتاحين file أو code.
    • file: عنوان شيفرة الأنماط المراد حقنها.
    • code: محتوى شيفرة الأنماط المُراد حقنها.
  • callback: الدالة التي ستُنفذ بعد حقن شيفرة CSS.

المنصات المدعومة هي:

  • أندرويد
  • iOS
  • ويندوز

توضح الشيفرة التالية كيفية استعمال التابع insertCSS:

var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.addEventListener('loadstop', function() {
    ref.insertCSS({file: "mystyles.css"});
});

مثال توضيحي

يمكنك استخدام هذه الإضافة لعرض صفحات توثيقٍ في تطبيقك. بحيث يمكن للمستخدمين عرض وثائق المساعدة عبر الإنترنت ثمَّ إغلاقها دون مغادرة التطبيق.

في هذه الفقرة تجد بعض المقتطفات البرمجية التي توضح كيفية القيام بذلك.

منح المستخدمين طريقة لطلب المساعدة

هناك الكثير من الطرق لفعل هذا. وتُعد القوائم المنسدلة من أبسطها.

<select id="help-select">
    <option value="default">Need help?</option>
    <option value="article">Show me a helpful article</option>
    <option value="video">Show me a helpful video</option>
    <option value="search">Search for other topics</option>
</select>

قم بتجميع اختيارات المستخدمين في دالة الصفحة onDeviceReady، ثم أرسل عنوانًا (URL) مناسبًا لدالة المساعدة (helper function) في أحد ملفات المكتبة المشتركة. اسم دالة المساعدة في هذا المثال هو showHelp()‎، والتي سنعرّفها في الفقرة التالية.

$('#help-select').on('change', function (e) {

    var url;

    switch (this.value) {

        case "article":
            url = "https://cordova.apache.org/docs/en/latest/"
                        + "reference/cordova-plugin-inappbrowser/index.html";
            break;

        case "video":
            url = "https://youtu.be/F-GlVrTaeH0";
            break;

        case "search":
            url = "https://www.google.com/#q=inAppBrowser+plugin";
            break;
    }

    showHelp(url);

});

تحميل صفحة المساعدة

سنستخدم الدالة open لتحميل صفحة المساعدة. وسنضبط الخاصية hidden إلى القيمة yes، لكي نحرص على أن يُعرَض المتصفح بعد تحميل محتوى الصفحة. فبهذه الطريقة، لن يرى المستخدمون متصفحًا فارغًا أثناء انتظار ظهور المحتوى. عندما يُطلق الحدث loadstop، سنعرف متى تم تحميل المحتوى (سنتعامل مع هذا الحدث بعد قليل).

function showHelp(url) {

    var target = "_blank";

    var options = "location=yes,hidden=yes";

    inAppBrowserRef = cordova.InAppBrowser.open(url, target, options);

    inAppBrowserRef.addEventListener('loadstart', loadStartCallBack);

    inAppBrowserRef.addEventListener('loadstop', loadStopCallBack);

    inAppBrowserRef.addEventListener('loaderror', loadErrorCallBack);

}

إعلام المستخدمين بجاهزية صفحتهم

لا يظهر المتصفح على الفور، لذلك سنستخدم الحدث loadstart لعرض رسالة الحالة (status message)، أو شريط التقدم (progress bar)، أو أي مؤشرٍ آخر. هذا يؤكد للمستخدمين أن المحتوى في خضمِّ التحميل.

function loadStartCallBack() {
    $('#status-message').text("loading please wait ...");
}

عرض صفحة المساعدة

عندما يُطلق الحدث loadstopcallback، نعلم أن المحتوى قد حُمِّل، وحينها يمكننا إظهار المتصفح. هذه الحيلة ستخلق انطباعًا لدى المستخدم بسرعة التحميل. والحقيقة هي أنه، سواء أعرضت المتصفح قبل تحميل المحتوى أم لا، فإنّ وقت التحميل لن يتغير.

function loadStopCallBack() {

    if (inAppBrowserRef != undefined) {

        inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });

        $('#status-message').text("");

        inAppBrowserRef.show();
    }

}

ربما لاحظت استدعاء الدالة insertCSS. هذا لا يخدم أي غرض معين في مثالنا هذا. ولكنه يعطيك فكرة عن كيفية استخدامها. في هذه الحالة، سنتأكد فقط من أنّ حجم خط صفحاتك يساوي قيمة معينة. يمكنك استخدام هذه الدالة لإدراج أنماط CSS التي تريد. ويمكنك حتى الإشارة إلى ملف CSS في مشروعك.

معالجة أخطاء الصفحة

في بعض الأحيان، لا تكون الصفحة المراد تحميلها مُتاحةً، أو قد يكون هناك خطأ في البرنامج النصي، أو قد لا يملك المستخدم إذن الدخول إلى موردٍ ما. التعامل مع هذه الأوضاع، وطريقة ذلك متروكة لك ولتصميمك. يمكنك ترك المتصفح يعرض رسالة خطأ، أو يمكنك عرضها بطريقة أخرى.

سنحاول إظهار الخطأ في مربعٍ يعرض رسالة. يمكننا القيام بذلك عن طريق حقن برنامج نصي يستدعي الدالة alert. المشكلة في هذا أنه لن يعمل على متصفحات ويندوز، لذا سيتعين علينا التحقق من قيمة معامل دالة رد النداء executeScript لمعرفة ما إذا كانت المحاولة ناجحة. إذا لم ينجح الأمر، فسنكتفي بعرض رسالة الخطأ في وسم <div> داخل الصفحة:

function loadErrorCallBack(params) {

    $('#status-message').text("");

    var scriptErrorMesssage =
       "alert('Sorry we cannot open that page. Message from the server is : "
       + params.message + "');"

    inAppBrowserRef.executeScript({ code: scriptErrorMesssage }, executeScriptCallBack);

    inAppBrowserRef.close();

    inAppBrowserRef = undefined;

}

function executeScriptCallBack(params) {

    if (params[0] == null) {

        $('#status-message').text(
           "Sorry we couldn't open that page. Message from the server is : '"
           + params.message + "'");
    }

}

معلومات استخدام إضافية

العناوين المحلية (المصدر في حزمة التطبيق)

var iab = cordova.InAppBrowser;
iab.open('local-url.html');                  // يُحمّل في عارض كوردوفا
iab.open('local-url.html', '_self');         // يُحمّل في عارض كوردوفا
iab.open('local-url.html', '_system');       // خطأ أمني: متصفح النظام 
                                             // (iOS) ولكن لن يُحمّل العنوان 
iab.open('local-url.html', '_blank');        // InAppBrowser يُحمّل في 
iab.open('local-url.html', 'random_string'); // InAppBrowser يُحمّل في
iab.open('local-url.html', 'random_string', 'location=no'); //  InAppBrowser يُحمّل في
                                                            // دون عرض شريط التصفح

محتوى مُدرج في اللائحة البيضاء

var iab = cordova.InAppBrowser;
iab.open('http://whitelisted-url.com');                  // يُحمّل في عارض كوردوفا
iab.open('http://whitelisted-url.com', '_self');         // يُحمّل في عارض كوردوفا
iab.open('http://whitelisted-url.com', '_system');       // يُحمّل في متصفح النظام
iab.open('http://whitelisted-url.com', '_blank');        // InAppBrowser يُحمّل في
iab.open('http://whitelisted-url.com', 'random_string'); // InAppBrowser يُحمّل في
iab.open('http://whitelisted-url.com', 'random_string', 'location=no'); // يُحمّل في 
                                                 // دون عرض شريط التصفح InAppBrowser

العناوين غير المُدرجة في اللائحة البيضاء

var iab = cordova.InAppBrowser;
iab.open('http://url-that-fails-whitelist.com');              // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', '_self');      //InAppBrowser يُحمّل في 
iab.open('http://url-that-fails-whitelist.com', '_system');  // يُحمل في متصفح النظام
iab.open('http://url-that-fails-whitelist.com', '_blank');   // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', 'random_string'); // InAppBrowser يُحمّل في
iab.open('http://url-that-fails-whitelist.com', 'random_string', 'location=no'); 
// دون عرض شريط التصفح InAppBrowser يُحمّل في

انظر أيضًا

مصادر