الفرق بين المراجعتين لصفحة: «Cordova/cordova plugin inappbrowser»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 300: | سطر 300: | ||
== مثال توضيحي == | == مثال توضيحي == | ||
يمكنك استخدام هذه الإضافة لعرض صفحات توثيقٍ | يمكنك استخدام هذه الإضافة لعرض صفحات توثيقٍ في تطبيقك. يمكن للمستخدمين عرض وثائق المساعدة عبر الإنترنت ثم إغلاقها دون مغادرة التطبيق. | ||
في هذه الفقرة تجد بعض المقتطفات البرمجية التي توضح كيفية القيام بذلك. | |||
=== منح المستخدمين طريقة لطلب المساعدة === | === منح المستخدمين طريقة لطلب المساعدة === | ||
هناك الكثير من الطرق لفعل هذا | هناك الكثير من الطرق لفعل هذا. ولكن تُعد القوائم المنسدلة إحدى أبسط الطرق للقيام بذلك. | ||
<syntaxhighlight lang=" | <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> | ||
سطر 318: | سطر 313: | ||
</select></syntaxhighlight> | </select></syntaxhighlight> | ||
قم بتجميع اختيارات المستخدمين في | قم بتجميع اختيارات المستخدمين في دالة الصفحة <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; | ||
سطر 337: | سطر 332: | ||
=== تحميل صفحة المساعدة === | === تحميل صفحة المساعدة === | ||
سنستخدم الدالة <code>open</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"; | ||
سطر 348: | سطر 343: | ||
=== إعلام المستخدمين بجاهزية صفحتهم === | === إعلام المستخدمين بجاهزية صفحتهم === | ||
لا يظهر المتصفح على الفور، لذلك سنستخدم الحدث <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 ..."); | ||
سطر 354: | سطر 349: | ||
=== عرض صفحة المساعدة === | === عرض صفحة المساعدة === | ||
عندما يُطلق الحدث <code>loadstopcallback</code>، نعلم أن المحتوى قد حُمِّل، وحينها يمكننا إظهار المتصفح. هذه الحيلة | عندما يُطلق الحدث <code>loadstopcallback</code>، نعلم أن المحتوى قد حُمِّل، وحينها يمكننا إظهار المتصفح. هذه الحيلة ستخلق انطباعًا لدى المستخدم بتُحسّن الأداء. والحقيقة هي أنه، سواء أعرضت المتصفح قبل تحميل المحتوى أم لا، فإنّ وقت التحميل لن يتغير. | ||
<syntaxhighlight lang="javascript">function loadStopCallBack() { | <syntaxhighlight lang="javascript">function loadStopCallBack() { | ||
if (inAppBrowserRef != undefined) { | if (inAppBrowserRef != undefined) { | ||
سطر 363: | سطر 358: | ||
}</syntaxhighlight> | }</syntaxhighlight> | ||
ربما لاحظت استدعاء الدالة <code>insertCSS</code>. هذا لا يخدم أي غرض معين في | ربما لاحظت استدعاء الدالة <code>insertCSS</code>. هذا لا يخدم أي غرض معين في مثالنا هذا. ولكنه يعطيك فكرة عن كيفية استخدامها. في هذه الحالة، سنتأكد فقط من أنّ حجم خط صفحاتك يساوي قيمة معينة. يمكنك استخدام هذه الدالة لإدراج أنماط CSS التي تريد. ويمكنك حتى الإشارة إلى ملف CSS في مشروعك. | ||
=== معالجة أخطاء الصفحة === | === معالجة أخطاء الصفحة === | ||
في بعض الأحيان، لا | في بعض الأحيان، لا تكون الصفحة المراد تحميلها مُتاحة، أو قد يكون هناك خطأ في البرنامج النصي، أو قد لا يملك المستخدم إذن الدخول إلى موردٍ ما. التعامل مع هذه الأوضاع، وطريقة ذلك متروكة لك ولتصميمك. يمكنك ترك المتصفح يعرض رسالة خطأ، أو يمكنك عرضها بطريقة أخرى. | ||
سنحاول إظهار الخطأ في مربعٍ يعرض رسالة. يمكننا القيام بذلك عن طريق حقن برنامج نصي يستدعي الدالة <code>alert</code>. المشكلة في هذا أنه لن يعمل على | سنحاول إظهار الخطأ في مربعٍ يعرض رسالة. يمكننا القيام بذلك عن طريق حقن برنامج نصي يستدعي الدالة <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 = | ||
سطر 384: | سطر 378: | ||
+ params.message + "'"); | + params.message + "'"); | ||
} | } | ||
}</syntaxhighlight> | }</syntaxhighlight><span></span> | ||
== معلومات استخدام إضافية == | == معلومات استخدام إضافية == | ||
سطر 412: | سطر 406: | ||
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'); // loads in the InAppBrowser, no location bar</syntaxhighlight> | ||
==مصادر== | ==مصادر== | ||
*[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 في توثيق كوردوفا الرسمي.]<code> |
مراجعة 15:16، 20 ديسمبر 2018
تساعد إضافة المتصفح الداخلي (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).
للتوافق مع الإصدارات القديمة، تنشُبُ (hooks) هذه الإضافة أيضًا الدالةَ 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
(القيمة الافتراضية) لفتح المتصفح وتحميل الصفحة بشكل طبيعي.
clearcache
: اضبط هذا الخيار عند القيمة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
إلى القيمةyes
.hardwareback
: اضبط هذا الخيار عند القيمةyes
لاستخدام زر الرجوع الخاص بالجهاز للرجوع للخلف بحسب تاريخ النافذةInAppBrowser
. إذا لم تكن هناك صفحات سابقة، فسيتم إغلاقInAppBrowser
. القيمة الافتراضية هيyes
، إن كنت تريد أن تجعل زر الرجوع يغلقInAppBrowser
، فععيّن هذا الخيار إلى القيمةno
.hidenavigationbuttons
: اضبط هذا الخيار عند القيمةyes
لإخفاء أزرار التصفح (navigation buttons) على شريط التصفح، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيارlocation
عند القيمةyes
. القيمة الافتراضية هيno
.hideurlbar
: اضبط هذا الخيار عند القيمةyes
لإخفاء شريط العنوان من شريط التصفح، ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيارlocation
عند القيمةyes
. القيمة الافتراضية هيno
.navigationbuttoncolor
: اعط لهذا الخيار سلسلة نصية تمثل لونًا سداسي عشريًا (hex color) صالحًا، مثل:#00ff00
، لتغيير لون أزرار التصفح الافتراضي. ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيارlocation
عند القيمةyes
، ولم يُعيّن الخيارhidenavigationbuttons
عند القيمةyes
.toolbarcolor
: اعط لهذا الخيار سلسلة نصية تمثل لونًا سداسي عشريًا (hex color) صالحًا، مثل:#00ff00
، لتغيير لون شريط الأدوات لافتراضي. ليس لهذا الخيار تأثير إلا إن كان المستخدم قد عيّن الخيارlocation
عند القيمةyes
.zoom
: اضبط هذا الخيار عند القيمةyes
لعرض عناصر التحكم في الحجم في متصفح أندرويد، أو اضبطه عند القيمةno
إن أردت إخفاءها. القيمة الافتراضية هيyes
.mediaPlaybackRequiresUserAction
: اضبط هذا الخيار عند القيمةyes
لمنع صوتيات أو فيديوها HTML5 من التشغيل التلقائي (القيمة الافتراضية هيno
).shouldPauseOnSuspend
: اضبط هذا الخيار عند القيمةyes
لإيقاف عارضInAppBrowser
أو استئنافه مع التطبيق، وذلك لإيقاف صوت الخلفية (قد يكون هذا ضروريًا لتجنب المشكلات التي تخص Google Play كما هو موضح في الصفحة CB-11013).useWideViewPort
: يحدد هذا الخيار ما إذا كان العارض سيدعم وسم HTML الوصفي "viewport
"، أو أنّ عليه أن يستخدم إطار عرضٍ (viewport) واسعٍ. عندما يُعطى هذا الخيار القيمةno
، سيُعيّن عرض المخطط (layout) إلى قيمة عرض العارض محسوبةً بوحدة البكسل المستقلة عن الجهاز (CSS). إما إن أُعطي هذا الخيار القيمةyes
، وكانت الصفحة تحتوي الوسم الوصفيviewport
، فستُستخدم قيمة العرض المحددة في الوسم. إن لم تحتوِ الصفحة على الوسم، أو لم تحدد قيمةً للعرض، فسيُستخدم إطار عرضٍ واسعٍ. (القيمة الافتراضية هيyes
).
تدعم منصة iOS الخيارات الإضافية التالية:
hidden
: اضبط هذا الخيار عند القيمةyes
لإنشاء المتصفح وتحميل الصفحة، ولكن دون إظهاره. سيُطلق الحدثloadstop
عند اكتمال التحميل. احذف هذا الخيار أو اضبطه عند القيمةno
(الافتراضية) لفتح المتصفح وتحميله بشكل طبيعي.clearcache
: اضبط هذا الخيار عند القيمةyes
لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط (cookie cache) للمتصفح قبل فتح النافذة الجديدةclearsessioncache
: اضبط هذا الخيار عند القيمةyes
لمحو ذاكرة التخزين المؤقت لملفات تعريف الارتباط قبل فتح النافذة الجديدةclosebuttoncolor
: اعط لهذا الخيار سلسلةً نصيةً تمثل لونًا سداس عشريًا (hex color) صالحًا، مثل:#00ff00
، لتغيير لون الزرDone
الافتراضي. لا يُطبق هذا الإعداد إلا عند تفعيل شريط الأدوات.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
). لا يُطبّق هذا الخيار إلا عند تفعيل شريط الأدوات.enableViewportScale
: اضبط هذا الخيار عند القيمةyes
أوno
لمنع تعديل حجم إطار العرض (viewport) عبر الوسم الوصفي (القيمة الافتراضية هي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
- ويندوز
مثال
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
يمثل 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
.callback
: الدالة التي ستنفذ عند إطلاق الحدث. يُمرّر إليها الكائنInAppBrowserEvent
كمعاملٍ.
مثال
var inAppBrowserRef;
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);
}
function loadStartCallBack() {
$('#status-message').text("loading please wait ...");
}
function loadStopCallBack() {
if (inAppBrowserRef != undefined) {
inAppBrowserRef.insertCSS({ code: "body{font-size: 25px;" });
$('#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 + "'");
}
}
خاصيات الكائن InAppBrowserEvent
type
: اسم الحدث، والذي يساوي إمّاloadstart
أوloadstop
أوloaderror
أوexit
. ((سلسلة نصية)url
: العنوان الذي تم تحميله. (سلسلة نصية)code
: رمز الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدثloaderror
. ((عدد)message
: رسالة الخطأ، لا تكون هذه الخاصية مُتاحةً إلا في حال إطلاق الحدثloaderror
. (سلسلة نصية)
المنصات المدعومة
- أندرويد
- Browser
- iOS
- ويندوز
- OSX
ملاحظات خاصة بالمتصفحات (Browsers)
في هذه المنصات، لا يُطلق الحدثان loadstart
و loaderror
.
مثال سريع
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
.
callback
: يمثل هذا المعامل الدالة التي سيتم تنفيذها عند إطلاق الحدث. والتي سيُمرّر إليها الكائنٌInAppBrowserEvent
.
المنصات المدعومة
- أندرويد
- Browser
- iOS
- ويندوز
مثال سريع
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
- ويندوز
مثال سريع
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'location=yes');
ref.close();
InAppBrowser.show
يُظهر هذا التابع نافذة InAppBrowser
فُتِحت مخفية. استدعاء هذا التابع لن يكون له أي تأثير إن كان InAppBrowser
مرئيًا.
ref.show();
المتغير ref
يُشير إلى نافذة InAppBrowser
(InAppBrowser
)
المنصات المدعومة
- أندرويد
- Browser
- iOS
- ويندوز
مثال سريع
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank', 'hidden=yes');
// ...بعد برهة
ref.show();
InAppBrowser.hide
يُخفي هذا التابع نافذة InAppBrowser
. استدعاء هذا التابع ليس له أي تأثير إن كان InAppBrowser
مخفيًا مسبقاً.
ref.hide();
المتغير ref
يُشير إلى نافذة InAppBrowser
(InAppBrowser
)
المنصات المدعومة
- أندرويد
- iOS
- ويندوز
مثال سريع
var ref = cordova.InAppBrowser.open('http://apache.org', '_blank');
// ...بعد بُرهة
ref.hide();
InAppBrowser.executeScript
يحقن (Injects) هذا التابع شيفرة جافاسكريبت في نافذة InAppBrowser
. (متاح فقط عند ضبط الخيار target
عند القيمة '_blank'
)
ref.executeScript(details, callback);
يشير المتغير ref
إلى نافذة InAppBrowser
. (InAppBrowser
)
المعاملات
injectDetails
: يمثل هذا المعامل تفاصيل البرنامج النصي المراد تنفيذه، مع تحديد أحد المفتاحينfile
أوcode
. (كائن)file
: عنوان النص المراد حقنُه.code
: نص الشيفرة البرمجية المراد حقنُها.
callback
: الدالة التي سُتنفّذ بعد حقن شيفرة جافاسكريبت.- إن كان البرنامج النصي المحقون من النوع
code
، فسُينفّذ رد النداء (callback) مع إعطائه معاملًا واحدًا، والذي يساوي القيمة التي يُعيدها البرنامج النصي مُغلّفةً في مصفوفةٍ (Array
). بالنسبة للنصوص النصية متعددة الأسطر، فالقيمة ستساوي قيمة آخر تعليمة (statement)، أو آخر تعبير (expression) مُقيّمٍ.
- إن كان البرنامج النصي المحقون من النوع
المنصات المدعومة
- أندرويد
- Browser
- iOS
- ويندوز
مثال سريع
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
(InAppBrowser)
injectDetails
: تفاصيل البرنامج النصي المُراد تشغيله، مع تحديد أحد المفتاحينfile
أوcode
. (كائن)file
: عنوان ورقة الأنماط المراد حقنها.code
: نص ورقة الأنماط المُراد حقنها.
callback
: الدالة التي ستُنفذ بعد حقن CSS.
المنصات المدعومة
- أندرويد
- iOS
- ويندوز
مثال سريع
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'); // loads in the Cordova WebView
iab.open('local-url.html', '_self'); // loads in the Cordova WebView
iab.open('local-url.html', '_system'); // Security error: system browser, but url will not load (iOS)
iab.open('local-url.html', '_blank'); // loads in the InAppBrowser
iab.open('local-url.html', 'random_string'); // loads in the InAppBrowser
iab.open('local-url.html', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar
محتوى المُدرج في اللائحة البيضاء
var iab = cordova.InAppBrowser;
iab.open('http://whitelisted-url.com'); // loads in the Cordova WebView
iab.open('http://whitelisted-url.com', '_self'); // loads in the Cordova WebView
iab.open('http://whitelisted-url.com', '_system'); // loads in the system browser
iab.open('http://whitelisted-url.com', '_blank'); // loads in the InAppBrowser
iab.open('http://whitelisted-url.com', 'random_string'); // loads in the InAppBrowser
iab.open('http://whitelisted-url.com', 'random_string', 'location=no'); // loads in the InAppBrowser, no location bar
العناوين غير المُدرجة في اللائحة البيضاء
var iab = cordova.InAppBrowser;
iab.open('http://url-that-fails-whitelist.com'); // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com', '_self'); // loads in the InAppBrowser
iab.open('http://url-that-fails-whitelist.com', '_system'); // loads in the system browser
iab.open('http://url-that-fails-whitelist.com', '_blank'); // loads in the 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', 'location=no'); // loads in the InAppBrowser, no location bar