browser - JavaFX-هل يمكن نشرها بالفعل في المتصفح؟




ria (5)

لقد قمت ببعض الأبحاث على JavaFX خلال العام الماضي ، وقمت ببناء بعض تطبيقات سطح المكتب الأساسية معها.

توصف بأنها تستخدم لإنشاء RIAs (تطبيق الإنترنت الغني).

http://en.wikipedia.org/wiki/Javafx

ولكن هل يمكن نشرها بواسطة متصفح الويب؟ لقد قمت بنشرها فقط عبر ملف JAR القابل للتنفيذ.

ما مدى سهولة النشر عبر متصفح الويب؟ هل يعمل؟ هل يملك احد خبرة في هذا؟

http://docs.oracle.com/javafx/2/deployment/deployment_toolkit.htm


Answers

اعتبارًا من عام 2016 ، يمكنك استخدام jpro بدون أي مكون إضافي للمتصفح. حتى أنه يعمل على الهواتف النقالة.

تحرير 1: المشروع مجاني للمشاريع غير التجارية أو مفتوحة المصدر. يمكن العثور على "hello world" here


JavaFX - هل يمكن نشرها بالفعل في المتصفح؟

لا ليس بعد الآن.

كانت الإجابة نعم ، كما هو مذكور في هذه الإجابة ، على الرغم من أنه حتى في عام 2013 عندما كتب ذلك كانت الكتابة على الحائط. ومع ذلك ، هنا في عام 2016 الجواب هو لا ، لا يمكن. لا تدعم المتصفحات الحديثة بشكل أساسي NPAPI بعد الآن (Firefox لـ Java ، ولكن فقط حتى نهاية السنة) ، و NPAPI مطلوب لمكون Java الإضافي.


لقد وجدت الحل عن طريق الصدفة here . ما هو مفقود في مشروع الويب الخاص بي.

يجب أن أضيف هذا إلى ملف web.xml:

 <mime-mapping>
    <extension>jnlp</extension>
    <mime-type>application/x-java-jnlp-file</mime-type>
</mime-mapping>

تحديث لخارطة طريق عميل Java في مارس 2018

أشجع القراء المهتمين بهذا السؤال على مراجعة Oracle Whitepaper التالي:

توضح الورقة أعلاه وضع أوراكل الرسمي على التقنيات ذات الصلة (JavaFX / Swing / AWT / Applets / WebStart) ، وهي التواريخ التي تنوي دعمها لتلك التقنيات وأي من تلك التقنيات التي تنوي الانتقال إلى مشاريع التطوير مفتوحة المصدر منفصلة عن JDK و JRE.

تحديث لـ Java 9 ، تشرين الأول 2017

وفقًا لملاحظات إصدار Java 9 :

تم إيقاف تشغيل Java Applet و WebStart ، بما في ذلك Applet API و Java plug-in و Java Applet Viewer و JNLP و Java Web Start بما في ذلك أداة javaws في JDK 9 وسيتم إزالتها في إصدار مستقبلي.

لذا ، بالنسبة إلى Java 9+ ، لن يكون استخدام JavaFX في مستعرض يستخدم مكون Java الإضافي ممكناً إلا باستخدام تقنية موقوفة. ملاحظات أوراكل في جزء آخر من ملاحظات الإصدار Java 9 :

يستنزف Java Plug-in وتقنيات التطبيقات المصاحبة في برامج Oracle JDK 9. في حين لا تزال هذه التقنيات متوفرة في JDK 9 ، فسيتم النظر في إزالتها من Oracle JDK و JRE في إصدار مستقبلي. تتطلب تطبيقات Applets و JavaFX المضمنة في صفحة الويب تشغيل Java Plug-in. خذ بعين الاعتبار إعادة كتابة هذه الأنواع من التطبيقات مثل Java Web Start أو التطبيقات المستقلة.

ملاحظة: لا يعد Java Web Start حلاً بديلاً لأن ذلك قد تم إيقافه أيضًا (على أي حال ، فإنه يختلف عن تطبيق مضمن ويتم عرضه في صفحة المتصفح).

كبديل يقدم وظائف مماثلة ، ضع في اعتبارك شيئًا مثل jpro ، والذي ينشر تطبيقات JavaFX في متصفح بدون مكون Java الإضافي (jpro حاليًا فقط في الإصدار التجريبي المغلق ، لذلك فهو ليس حلاً قابلاً للتطبيق اعتبارًا من تشرين الأول 2017 ، ولكن ربما يومًا ما في مستقبل...).

في الوقت الحالي ، أوصي بأن أفضل طريقة لنشر تطبيقات JavaFX هي تطبيقات مستقلة ، تعمل خارج المتصفح.

الإجابة السابقة لـ Java 7 و 8

JavaFx - هل يمكن نشرها بالفعل في المتصفح؟

نعم ، يمكن نشر تطبيقات JavaFX بحيث يتم تشغيلها داخل متصفح الويب المستضاف على صفحة HTML.

التكنولوجيا التي تسمح بحدوث ذلك هي Java Plugin . هذا البرنامج المساعد حاليا هو حل البرنامج المساعد المتصفح NPAPI القائمة. يتم شحن Java Plugin ببيئة Oracle Java 7 Runtime Standard .

لا يتم دعم جميع المتصفحات ، فقط تلك المدرجة في صفحة تكوينات JavaFX المدعومة .

ما مدى سهولة النشر عبر متصفح الويب؟

أسهل طريقة لنشر مشروع JavaFX في متصفح الويب هي:

  1. قم بإنشاء مشروع JavaFX جديد في NetBeans .
  2. تطوير تطبيق HelloWorld بسيط .
  3. اتبع الإرشادات الخاصة بنشر تطبيق JavaFX الأول .

هذا ليس صعبا (في رأيي).

بدلاً من ذلك ، اتبع الإرشادات حول المرجع التفصيلي لنشر تطبيقات JavaFX (أو استخدم أدوات الطرف الثالث). بالنسبة للعديد من المشاريع ، يعد استخدام أداة أخرى غير NetBeans IDE لإجراء التغليف طريقة أفضل. ومع ذلك ، فمن السهل بشكل عام السماح للمهام التعبئة النشر النشر معالجة NetBeans IDE لك.

ما يلي لا يرتبط بالإجابة على السؤال الأصلي ، ولكنه يقدم بعض الآراء والمعلومات المطلوبة في التعليقات على هذه الإجابة.

بعض النصائح

هناك مطبات لنشر Java في المستعرض. أشجعك على إجراء بحث Google الخاص بك حول هذا الموضوع.

في رأيي ، استناداً إلى نموذج نشر JavaFX 2.x الحالي ، بالنسبة لمعظم أنواع التطبيقات التي تتطلب مستعرضًا كحاوية وقت تشغيل أساسية ، فإن استخدام JavaFX ليس حلاً مناسبًا.

قم بفحص متطلبات النشر والتشغيل الخاصة بالتطبيق الخاص بك. استنادًا إلى متطلباتك ، ومعرفتك بنموذج التنفيذ القائم على متصفح JavaFX ، قرر ما إذا كان النشر المستند إلى المتصفح باستخدام تقنية JavaFX هو الآلية الصحيحة لتطبيقك.

اثنين من الصعوبات المحتملة لمتصفح تطبيقات JavaFX المضمنة

لا تسمح بعض المتصفحات المهمة (مثل Internet Explorer 10 و iOS Safari وقريبًا Chrome Desktop ) بتنفيذ المكونات الإضافية باستخدام NPAPI المستخدم حاليًا بواسطة المكون الإضافي لمتصفح جافا => قد يتعذر على بعض المستخدمين المستهدفين استخدام التطبيق الخاص بك.

باستخدام تطبيق مضمن للتصفح ، لا يمكنك التحكم الكامل في وقت التشغيل الذي ينفذ فيه التطبيق الخاص بك (واجهة المتصفح + جافا + واجهة البرنامج المساعد) => قد يتوقف التطبيق الذي كان يعمل عند تثبيته لأول مرة عن العمل كما هو متوقع بعد التحديث إلى هذه مكونات وقت التشغيل.

بدائل النشر

إذا كان نموذج النشر المستند إلى المستعرض غير مناسب للتطبيق الخاص بك ، فهناك طرق أخرى لنشر تطبيقات JavaFX (مثل WebStart ، والمزودات المستقلة والتطبيقات القائمة بذاتها).


تحرير: للرجوع إليها هنا من قبل شرح المواصفات من قبل الدكتور أكسل Rauschmayer http://www.2ality.com/2011/06/javascript-equality.html كتب رائعة حقا.

=== (Strict Equality): تعتبر فقط القيم المتساوية التي لها نفس النوع.

  1. undefined === undefined، null === null،
  2. NaN === لا شيء بما في ذلك نفسه ،
  3. بدائي [Number | String | Boolean] === قيمة بدائية متساوية ،
  4. إلى النفس (+0 === -0)
  5. كائنان [صفيف | كائن | وظيفة] === ذاتي فقط (نفس الكيان الدقيق)

== (مساومة لينيت)

  1. إذا كان كلا القيمين من نفس النوع: قارن مع ===.
  2. undefined == فارغة
  3. رقم وسلسلة: string => رقم ومقارنة
  4. منطقية وغير منطقية => غير منطقية إلى العدد والمقارنة
  5. string أو number => كائن: تحويل الكائن إلى بدائي والمقارنة.

في جميع بيئات الجافا سكريبت الحديثة ، يتم تطبيقها بشكل مختلف تمامًا. بعبارات بسيطة ، == اختبارات ل alkeness عن طريق تحويل متغيرات معينة في الأوليات (سلسلة ، عدد ، منطقية). === اختبارات التماثل صارمة ، مما يعني بالضبط نفس الكائن أو القيمة البدائية دون التحويل.

إذا قمت بذلك objOne == objTwo فماذا يحدث بالفعل هو [[EQUALS]].call(objOne.valueOf(), objTwo.valueOf())

يمكن أن يكون حل valueOf متصلاً إلى حد ما ، ويرتد بين الوظائف المكشوفة في JS وأشياء المحرك الداخلية. يكفي القول بأن المقارنة ستنتهي في النهاية بقيمتين تم إجبارهما على البدائية أو سيتم طرح خطأ.

تحرير: محاولات STRICT_EQUALS بالفعل STRICT_EQUALS أولاً الذي يستبق بقية العملية.

الشيء المثير هنا هو أن القيمة (و شريكها toString) يمكن تجاوزها. شغِّل هذا الجزء من الشفرة في Chrome (أعتقد أن هناك أيًا من webkit ، لست متأكدًا مما إذا كان JSC و V8 يشتركان في هذا الأمر). سوف يفجر عقلك:

var actions = [];
var overload = {
  valueOf: function(){
    var caller = arguments.callee.caller;
    actions.push({
      operation: caller.name,
      left: caller.arguments[0] === this ? "unknown" : this,
      right: caller.arguments[0]
    });
    return Object.prototype.toString.call(this);
  }
};
overload.toString = overload.valueOf;
overload == 10;
overload === 10;
overload * 10;
10 / overload;
overload in window;
-overload;
+overload;
overload < 5;
overload > 5;
[][overload];
overload == overload;
console.log(actions);

انتاج:

[ { operation: 'EQUALS',
    left: overload,
    right: 10 },
  { operation: 'MUL',
    left: overload,
    right: 10 },
  { operation: 'DIV',
    left: 'unknown',
    right: overload },
  { operation: 'IN',
    left: overload,
    right: DOMWindow },
  { operation: 'UNARY_MINUS',
    left: overload,
    right: undefined },
  { operation: 'TO_NUMBER',
    left: overload,
    right: undefined },
  { operation: 'COMPARE',
    left: overload,
    right: 5 },
  { operation: 'COMPARE',
    left: 'unknown',
    right: overload },
  { operation: 'ToString',
    left: 'unknown',
    right: overload } ]

يتم توضيح جوهر الفرق بين == و === خلال === لا تظهر في هذه القائمة. يتخطى الرحلة إلى JavascriptLand بالكامل. هذه المغامرة مكلفة عند مقارنة الأداء.

ومع ذلك ، تحتاج إلى حساب تحسينات المحرك. بالنسبة لمعظم الكائنات ، سيتمكن المحرك من قطع معظم الخطوات والبقاء في NativeLand والحصول على نفس الأداء تقريبًا. ولكن هذا ليس ضمانًا ، وإذا كان هناك شيء يمنع المحرك من استخدام التحسينات ، أو بعض النزعة في التعليمة البرمجية أو تجاوز المكوّنات أو عدد لا يحصى من المشكلات ، عندها سترى النتيجة في الأداء على الفور. === يجبرها.

=== فقط حول الشيء الثابت في Javascript.





browser javafx ria