Skip to content

Latest commit

 

History

History
259 lines (189 loc) · 12.6 KB

File metadata and controls

259 lines (189 loc) · 12.6 KB
category general
date 2026-03-29
description نفّذ جافا سكريبت في جافا بسرعة عن طريق تحميل ملف HTML وتقييم نصه البرمجي. تعلّم كيفية تشغيل JS من HTML، استرجاع متغيّر جافا سكريبت، وتقييم JS باستخدام Aspose.HTML.
draft false
keywords
execute javascript in java
run js from html
how to run js in java
retrieve javascript variable
how to evaluate js
language ar
og_description نفّذ جافا سكريبت في جافا بسرعة عن طريق تحميل ملف HTML وتقييم سكريبته. تعلّم كيفية تشغيل JS من HTML، واسترجاع متغيّر جافا سكريبت، وتقييم JS.
og_title تنفيذ JavaScript في Java – تشغيل JS من HTML
tags
java
javascript
aspose-html
scripting
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 – تشغيل JS من HTML

هل تساءلت يوماً كيف تنفّذ 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. سيضمن ذلك سحب الثنائيات الأصلية الصحيحة تلقائيًا.

Execute JavaScript in Java example

الخطوة 1: إعداد المشروع وإضافة Aspose.HTML

Maven

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-html</artifactId>
    <version>23.12</version> <!-- Use the latest version available -->
</dependency>

Gradle

implementation 'com.aspose:aspose-html:23.12'

لماذا هذا مهم: Aspose.HTML يضم محرك JavaScript خفيف الوزن، لذا لا تحتاج إلى Node.js أو Rhino أو Nashorn. يعمل عبر الأنظمة ويعتمد على DOM الذي تقوم بتحميله من ملف HTML.

الخطوة 2: إنشاء ملف 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 متاحًا طالما تم تعريفه قبل عملية التقييم.

الخطوة 3: كتابة كود Java لتنفيذ JavaScript في Java

فيما يلي فئة 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، إلخ).

الخطوة 4: تشغيل البرنامج والتحقق من المخرجات

قم بترجمة الفئة وتنفيذها:

mvn compile exec:java -Dexec.mainClass=JsExecution

يجب أن ترى:

Result from JS: 12.0

إذا حصلت على null أو استثناء، تحقق من صحة مسار ملف HTML ومن أن السكريبت فعلاً يعرّف المتغيّر total.

خطأ شائع: نسيان إضافة الشرطة المائلة النهائية في مسار الملف على نظام Windows قد يسبب FileNotFoundException. استخدم الشرطات المائلة الأمامية (/) أو Paths.get(...) لمسارات مستقلة عن النظام.

الخطوة 5: تشغيل JS من HTML لسيناريوهات أكثر تعقيدًا

5.1 تقييم تعبيرات عشوائية

أحيانًا لا تحتاج إلى متغيّر فقط؛ بل تحتاج إلى حساب شيء في الوقت الفعلي.

Object sum = ScriptEngine.evaluate(htmlDoc, "return 42 + 58;");
System.out.println("Sum: " + sum); // prints 100

5.2 الوصول إلى الدوال المعرفة في الصفحة

إذا كان الـ 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

5.3 معالجة الأخطاء بأناقة

غلف عملية التقييم بكتلة 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 إذا لم يكن المعرف معرفًا. التقاطه يتيح لك الرجوع إلى قيمة افتراضية أو تسجيل رسالة مفيدة.

الخطوة 6: نصائح لاسترجاع متغيّر JavaScript بأمان

الحالة التوصية
قد يكون المتغيّر غير معرف استخدم فحص typeof داخل المقطع: return typeof total !== 'undefined' ? total : null;
عدة سكريبتات تعدّل المتغيّر نفسه تأكد من أن السكريبت المطلوب يُنفّذ بعد الآخرين، أو غلف العملية بدالة مخصصة.
ملفات HTML الكبيرة تستهلك الذاكرة حمّل الجزء المطلوب فقط باستخدام DocumentFragment أو قم ببث الملف إذا كنت تعمل في بيئة محدودة.
الحاجة لتمرير بيانات من Java إلى JS استخدم ScriptEngine.evaluate(htmlDoc, "window.javaValue = 123;"); ثم اقرأها لاحقًا.

الخطوة 7: توسيع النهج – تقييم JS ديناميكيًا

افترض أنك تستقبل تعبير 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 >}}