| category | general | |||||
|---|---|---|---|---|---|---|
| date | 2026-03-29 | |||||
| description | نفّذ جافا سكريبت في جافا بسرعة عن طريق تحميل ملف HTML وتقييم نصه البرمجي. تعلّم كيفية تشغيل JS من HTML، استرجاع متغيّر جافا سكريبت، وتقييم JS باستخدام Aspose.HTML. | |||||
| draft | false | |||||
| keywords |
|
|||||
| language | ar | |||||
| og_description | نفّذ جافا سكريبت في جافا بسرعة عن طريق تحميل ملف HTML وتقييم سكريبته. تعلّم كيفية تشغيل JS من HTML، واسترجاع متغيّر جافا سكريبت، وتقييم JS. | |||||
| og_title | تنفيذ JavaScript في Java – تشغيل JS من HTML | |||||
| tags |
|
|||||
| title | تنفيذ جافا سكريبت في جافا – تشغيل جافا سكريبت من HTML | |||||
| url | /ar/java/advanced-usage/execute-javascript-in-java-run-js-from-html/ |
{{< blocks/products/pf/main-wrap-class >}} {{< blocks/products/pf/main-container >}} {{< blocks/products/pf/tutorial-page-section >}}
هل تساءلت يوماً كيف تنفّذ JavaScript في Java دون تشغيل متصفح؟ لست وحدك. يحتاج العديد من المطورين إلى تشغيل سكريبت صغير موجود داخل ملف HTML — ربما لحساب قيمة، أو للتحقق من صحة البيانات، أو ببساطة لجلب متغيّر إلى منطق Java الخاص بهم.
في هذا الدرس سنظهر لك طريقة نظيفة وخالية من التعقيدات لتشغيل JS من HTML، واستخراج ذلك المتغيّر من JavaScript، وحتى تقييم مقاطع برمجية عشوائية. بنهاية الدرس ستعرف بالضبط كيف تشغّل js في java باستخدام مكتبة Aspose.HTML، وستحصل على مثال كامل قابل للتنفيذ بين يديك.
- تحميل مستند HTML يحتوي على كتلة
<script>مضمنة. - استخدام
ScriptEngine.evaluateلاسترجاع قيم متغيّرات JavaScript. - التعامل مع المشكلات الشائعة مثل المتغيّرات المفقودة أو وجود سكريبتات متعددة.
- توسيع النهج لتقييم أي تعبير JavaScript في الوقت الفعلي.
المتطلبات المسبقة: Java 17 أو أحدث، أداة بناء Maven أو Gradle، وملف JAR الخاص بـ Aspose.HTML for Java (الإصدار التجريبي المجاني يكفي). لا تحتاج إلى أطر عمل أخرى.
نصيحة احترافية: إذا كنت تستخدم Maven، أضف تبعية Aspose.HTML إلى ملف
pom.xml. سيضمن ذلك سحب الثنائيات الأصلية الصحيحة تلقائيًا.
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>23.12</version> <!-- Use the latest version available -->
</dependency>implementation 'com.aspose:aspose-html:23.12'لماذا هذا مهم: Aspose.HTML يضم محرك JavaScript خفيف الوزن، لذا لا تحتاج إلى Node.js أو Rhino أو Nashorn. يعمل عبر الأنظمة ويعتمد على DOM الذي تقوم بتحميله من ملف HTML.
احفظ التالي كملف dynamic.html في مكان يمكن لكود Java الوصول إليه (مثلاً src/main/resources/dynamic.html).
<!DOCTYPE html>
<html>
<head>
<title>Dynamic Calculation</title>
<script>
// This script runs inside the HTML page.
var total = 5 + 7; // <-- we will retrieve this variable from Java
</script>
</head>
<body>
<p>The total will be computed by JavaScript.</p>
</body>
</html>حالة خاصة: إذا كان الـ HTML يحتوي على عدة وسوم
<script>، فإن Aspose.HTML يدمجها بترتيب المستند، لذا سيظل المتغيّرtotalمتاحًا طالما تم تعريفه قبل عملية التقييم.
فيما يلي فئة Java متكاملة ومستقلة تقوم بتحميل HTML، تشغيل السكريبت، وطباعة النتيجة.
import com.aspose.html.dom.Document;
import com.aspose.html.scripting.ScriptEngine;
public class JsExecution {
public static void main(String[] args) throws Exception {
// 1️⃣ Load the HTML document that contains the script.
// Replace the path with the actual location of your dynamic.html file.
Document htmlDoc = new Document("src/main/resources/dynamic.html");
// 2️⃣ Evaluate a JavaScript snippet that returns the value of the variable defined in the page.
// This is where we **retrieve javascript variable** 'total' from the DOM.
Object jsResult = ScriptEngine.evaluate(htmlDoc, "return total;");
// 3️⃣ Display the result obtained from the script execution.
System.out.println("Result from JS: " + jsResult); // Expected output: 12
}
}Documentيحلّل HTML، يبني DOM، ويُنفّذ تلقائيًا أي وسوم<script>مضمنة.ScriptEngine.evaluateينفّذ مقطعًا في سياق ذلك الـ DOM، لذا جميع المتغيّرات المعرفة مسبقًا تكون متاحة.- تُعيد الدالة كائنًا عامًّا
Object؛ Aspose.HTML يحوّل القيم الأولية من JavaScript إلى ما يعادلها في Java (الأرقام →java.lang.Double، السلاسل →java.lang.String، إلخ).
قم بترجمة الفئة وتنفيذها:
mvn compile exec:java -Dexec.mainClass=JsExecutionيجب أن ترى:
Result from JS: 12.0
إذا حصلت على null أو استثناء، تحقق من صحة مسار ملف HTML ومن أن السكريبت فعلاً يعرّف المتغيّر total.
خطأ شائع: نسيان إضافة الشرطة المائلة النهائية في مسار الملف على نظام Windows قد يسبب
FileNotFoundException. استخدم الشرطات المائلة الأمامية (/) أوPaths.get(...)لمسارات مستقلة عن النظام.
أحيانًا لا تحتاج إلى متغيّر فقط؛ بل تحتاج إلى حساب شيء في الوقت الفعلي.
Object sum = ScriptEngine.evaluate(htmlDoc, "return 42 + 58;");
System.out.println("Sum: " + sum); // prints 100إذا كان الـ HTML يعرّف دالة، يمكنك استدعاؤها كما تستدعي متغيّرًا.
<script>
function multiply(a, b) {
return a * b;
}
</script>Object product = ScriptEngine.evaluate(htmlDoc, "return multiply(6, 7);");
System.out.println("Product: " + product); // prints 42غلف عملية التقييم بكتلة try‑catch لتجنب الانهيارات عندما يرمي السكريبت استثناءً.
try {
Object result = ScriptEngine.evaluate(htmlDoc, "return unknownVar;");
System.out.println(result);
} catch (Exception e) {
System.err.println("Evaluation failed: " + e.getMessage());
}لماذا نلتقط الاستثناء؟ محرك JavaScript سيطلق
ScriptExceptionإذا لم يكن المعرف معرفًا. التقاطه يتيح لك الرجوع إلى قيمة افتراضية أو تسجيل رسالة مفيدة.
| الحالة | التوصية |
|---|---|
| قد يكون المتغيّر غير معرف | استخدم فحص typeof داخل المقطع: return typeof total !== 'undefined' ? total : null; |
| عدة سكريبتات تعدّل المتغيّر نفسه | تأكد من أن السكريبت المطلوب يُنفّذ بعد الآخرين، أو غلف العملية بدالة مخصصة. |
| ملفات HTML الكبيرة تستهلك الذاكرة | حمّل الجزء المطلوب فقط باستخدام DocumentFragment أو قم ببث الملف إذا كنت تعمل في بيئة محدودة. |
| الحاجة لتمرير بيانات من Java إلى JS | استخدم ScriptEngine.evaluate(htmlDoc, "window.javaValue = 123;"); ثم اقرأها لاحقًا. |
افترض أنك تستقبل تعبير JavaScript من ملف إعدادات وتريد تقييمه بأمان.
String expression = "Math.pow(2, 8) + total;"; // total is from the HTML page
Object dynamicResult = ScriptEngine.evaluate(htmlDoc, "return " + expression + ";");
System.out.println("Dynamic result: " + dynamicResult); // prints 268ملاحظة أمان: لا تقم أبدًا بتقييم شفرة غير موثوقة دون عزل. Aspose.HTML ينفّذ السكريبتات في بيئة محدودة، لكنه لا يزال يطبق مواصفات JavaScript بالكامل، لذا قد يستهلك الشفرة الخبيثة موارد CPU. تحقق من التعبيرات أو نفّذها في خيط منفصل مع مهلة زمنية.
import com.aspose.html.dom.Document;
import com.aspose.html.scripting.ScriptEngine;
public class JsExecutionFull {
public static void main(String[] args) throws Exception {
// Load the HTML containing our script.
Document htmlDoc = new Document("src/main/resources/dynamic.html");
// Retrieve the 'total' variable.
Object total = ScriptEngine.evaluate(htmlDoc, "return total;");
System.out.println("Total from JS: " + total); // → 12.0
// Evaluate an ad‑hoc expression using the retrieved value.
Object expressionResult = ScriptEngine.evaluate(
htmlDoc,
"return Math.pow(total, 2) - 10;"
);
System.out.println("Expression result: " + expressionResult); // → 134
// Call a function defined in the HTML (if any).
// Object product = ScriptEngine.evaluate(htmlDoc, "return multiply(3, 4);");
// System.out.println("Product: " + product);
}
}عند تشغيل هذه الفئة سيتظهر:
Total from JS: 12.0
Expression result: 134.0
الآن لديك قالب قوي لكيفية تشغيل js في java، سواء كنت تستخرج متغيّرًا واحدًا أو تنفّذ تعبيرًا كاملًا.
استعرضنا كل ما تحتاجه لتنفيذ JavaScript في Java باستخدام Aspose.HTML: تحميل ملف HTML، تشغيل السكريبتات المدمجة، واسترجاع متغيّرات JavaScript. يتيح لك النمط نفسه تشغيل js من html، تقييم مقاطع عشوائية، وحتى استدعاء الدوال المعرفة في الصفحة.
إذا رغبت في الخطوات التالية، جرّب:
- تمرير صيغ يقدمها المستخدم إلى
ScriptEngine.evaluate(احذر من الأمان). - تضمين مكتبة رسم بياني صغيرة في الـ HTML واستخراج بيانات SVG عبر Java.
- دمج هذه التقنية مع Selenium لاختبار واجهات بدون رأس حيث تحتاج إلى فحص القيم المحسوبة.
جرّبها، عدّل المقاطع، ودع محرك JavaScript يتولى الجزء الصعب بينما يبقى كود Java نظيفًا وآمنًا من النوع. برمجة سعيدة!
{{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} {{< blocks/products/products-backtop-button >}}
