مشاركة عبر


كيفية القيام بما يلي: تنفيذ اتصال Two-Way بين رمز DHTML والتعليمات البرمجية لتطبيق عميل

يمكنك استخدام عنصر تحكم WebBrowser لإضافة رمز تطبيق ويب (HTML (DHTML حيوي قائم على تشغيل تطبيقات العميل Windows Forms الخاصة بك. وذلك يكون مفيداً عندما تستثمر وقت التطور في إنشاء عناصر القائمة على DHTML وتريد الاستفادة من قدرات واجهة المستخدم Windows Forms الغنية دون الحاجة إلى إعادة كتابة التعليمات البرمجية الموجودة.

يسمح لك عنصر تحكم WebBrowser بتنفيذ اتصال ثنائي الاتجاه بين تعليمات تطبيق العميل الخاص بك البرمجية و رمز البرمجة النصية لصفحة الويب عبر خصائص ObjectForScripting و Document خصائص. بالإضافة إلى ذلك، يمكنك تكوين عنصر التحكم WebBrowser بحيث يندمج عنصر تحكم الويب الخاص بك مع عناصر تحكم أخرى على نموذج الطلب, خافيين تطبيقات DHTML الخاصة بهم. لمزج عناصر التحكم بسلاسة، عليك بتنسيق الصفحة المعروضة بحيث يكون لون خلفيتها و نمطها المرئي يتطابقان مع باقي النموذج، واستخدام خصائص AllowWebBrowserDrop, IsWebBrowserContextMenuEnabled، و WebBrowserShortcutsEnabled لتعطيل الميزات القياسية المستعرضة.

لتضمين DHTML في تطبيق Windows Forms الخاص بك

  1. عيين خاصية WebBrowser الخاصه بعنصر تحكم AllowWebBrowserDrop لـ false لمنع عنصر التحكم WebBrowser من فتح الملفات الساقطة عليه.

    webBrowser1.AllowWebBrowserDrop = False
    
    webBrowser1.AllowWebBrowserDrop = false;
    
  2. عيين خاصية IsWebBrowserContextMenuEnabled الخاصة بعنصر تحكم false لمنع عنصر تحكم WebBrowser من عرض اختصار قائمته عندما يقوم المستخدم بالنقر بزر الماوس الأيمن عليه.

    webBrowser1.IsWebBrowserContextMenuEnabled = False
    
    webBrowser1.IsWebBrowserContextMenuEnabled = false;
    
  3. تعيين خاصية WebBrowserShortcutsEnabled الخاصة بعنصر التحكم إلى false لمنع عنصر التحكم WebBrowser من الاستجابة إلى مفاتيح الاختصار.

    webBrowser1.WebBrowserShortcutsEnabled = False
    
    webBrowser1.WebBrowserShortcutsEnabled = false;
    
  4. قم بتعيين خاصية ObjectForScripting في مُنشئ الخاص بنموذج أو معالج الأحداث Load.

    ويستخدم التعليمات البرمجية التالية فئة النموذج نفسه للكائن البرمجة.

    ملاحظة

    طراز كائن المكون (COM) يجب أن يكون قادراً على الوصول إلى كائن البرمجة. لجعل نموذجك مرئي لـ COM, قم بإضافة سمة ComVisibleAttribute إلى فئة النموذج.

    webBrowser1.ObjectForScripting = Me
    
    webBrowser1.ObjectForScripting = this;
    
  5. تنفيذ الأساليب أو الخصائص العمومية في التعليمات البرمجية للتطبيق الذي سوف يستخدمه رمز برنامجك النصي.

    على سبيل المثال، إذا كنت تستخدم فئة نموذج كائن البرمجة، أضف التعليمة البرمجية التالية إلى فئة النموذج الخاص بك.

    Public Sub Test(ByVal message As String)
        MessageBox.Show(message, "client code")
    End Sub
    
    public void Test(String message)
    {
        MessageBox.Show(message, "client code");
    }
    
  6. استخدم كائن window.external في تعليمات برنامجك النصي البرمجية للوصول إلى الخصائص العامة و أساليب محددة خاصة بالكائن.

    مثال تعليمات HTML البرمجية التالية توضح كيفية استدعاء أسلوب على كائن البرمجة النصية من نقرة زر. انسخ هذه التعليمات البرمجية في عنصر BODY في مستند HTML الذي قمت بتحميله باستخدام إسلوب عنصر تحكم Navigate أو الذي قمت بتعيينه إلى خاصية عنصر تحكم DocumentText.

    <button onclick="window.external.Test('called from script code')">
        call client code from script code
    </button>
    
  7. زود تعليمات برنامجك النصي البرمجية بالمهام التي ستستخدمها تعليماتك البرمجية.

    يوفر عنصر البرنامج النصي HTML التالي مثال عن الدالة. انسخ هذه التعليمات البرمجية في عنصر HEAD في مستند HTML الذي قمت بتحميله باستخدام إسلوب عنصر تحكم Navigate أو الذي قمت بتعيينه إلى خاصية عنصر تحكم DocumentText.

    <script>
    function test(message) { 
        alert(message); 
    }
    </script>
    
  8. استخدم خاصية Document للوصول إلى التعليمات البرمجية للبرنامج النصي من تعليمات تطبيق العميل البرمجية الخاصة بك.

    على سبيل المثال, قم بإضافة التعليمات البرمجية التالية إلى زر معالج الأحداث Click.

    webBrowser1.Document.InvokeScript("test", _
        New String() {"called from client code"})
    
    webBrowser1.Document.InvokeScript("test",
        new String[] { "called from client code" });
    
  9. عند الانتهاء من تصحيح DHTML الخاص بك, قم بتعيين خاصية عنصر تحكم ScriptErrorsSuppressed إلى true لمنع عنصر تحكم WebBrowser من عرض رسائل الخطأ لمشاكل تعليمات البرنامج النصية.

    ' Uncomment the following line when you are finished debugging.
    'webBrowser1.ScriptErrorsSuppressed = True
    
    // Uncomment the following line when you are finished debugging.
    //webBrowser1.ScriptErrorsSuppressed = true;
    

مثال

يوفر المثال التعليمات البرمجية التالي نموذج عرض توضيحي عن التطبيق يمكنك استخدامه لفهم هذه ميزة أكثر. يتم تحميل التعليمات البرمجية إلى عنصر تحكم WebBrowser من خلال خاصية DocumentText بدلاً من تحميلها من ملف HTML منفصل.

Imports System
Imports System.Windows.Forms
Imports System.Security.Permissions

<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class Form1
    Inherits Form

    Private webBrowser1 As New WebBrowser()
    Private WithEvents button1 As New Button()

    <STAThread()> _
    Public Shared Sub Main()
        Application.EnableVisualStyles()
        Application.Run(New Form1())
    End Sub

    Public Sub New()
        button1.Text = "call script code from client code"
        button1.Dock = DockStyle.Top
        webBrowser1.Dock = DockStyle.Fill
        Controls.Add(webBrowser1)
        Controls.Add(button1)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
        Handles Me.Load

        webBrowser1.AllowWebBrowserDrop = False
        webBrowser1.IsWebBrowserContextMenuEnabled = False
        webBrowser1.WebBrowserShortcutsEnabled = False
        webBrowser1.ObjectForScripting = Me
        ' Uncomment the following line when you are finished debugging.
        'webBrowser1.ScriptErrorsSuppressed = True

        webBrowser1.DocumentText = _
            "<html><head><script>" & _
            "function test(message) { alert(message); }" & _
            "</script></head><body><button " & _
            "onclick=""window.external.Test('called from script code')"" > " & _
            "call client code from script code</button>" & _
            "</body></html>"
    End Sub

    Public Sub Test(ByVal message As String)
        MessageBox.Show(message, "client code")
    End Sub

    Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
        Handles button1.Click

        webBrowser1.Document.InvokeScript("test", _
            New String() {"called from client code"})

    End Sub

End Class
using System;
using System.Windows.Forms;
using System.Security.Permissions;

[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class Form1 : Form
{
    private WebBrowser webBrowser1 = new WebBrowser();
    private Button button1 = new Button();

    [STAThread]
    public static void Main()
    {
        Application.EnableVisualStyles();
        Application.Run(new Form1());
    }

    public Form1()
    {
        button1.Text = "call script code from client code";
        button1.Dock = DockStyle.Top;
        button1.Click += new EventHandler(button1_Click);
        webBrowser1.Dock = DockStyle.Fill;
        Controls.Add(webBrowser1);
        Controls.Add(button1);
        Load += new EventHandler(Form1_Load);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        webBrowser1.AllowWebBrowserDrop = false;
        webBrowser1.IsWebBrowserContextMenuEnabled = false;
        webBrowser1.WebBrowserShortcutsEnabled = false;
        webBrowser1.ObjectForScripting = this;
        // Uncomment the following line when you are finished debugging.
        //webBrowser1.ScriptErrorsSuppressed = true;

        webBrowser1.DocumentText =
            "<html><head><script>" +
            "function test(message) { alert(message); }" +
            "</script></head><body><button " +
            "onclick=\"window.external.Test('called from script code')\">" +
            "call client code from script code</button>" +
            "</body></html>";
    }

    public void Test(String message)
    {
        MessageBox.Show(message, "client code");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        webBrowser1.Document.InvokeScript("test",
            new String[] { "called from client code" });
    }

}

التحويل البرمجي للتعليمات البرمجية

يتطلب مثال التعليمات البرمجية :

  • مراجع عن تجميعات النظام و تجميعات System.Windows.Forms.

للحصول على المزيد من المعلومات حول إنشاء هذا المثال من خط أوامر Visual Basic أو #Visual C، راجع الإنشاء من سطر الأوامر (Visual Basic) أو إنشاء سطر الأوامر باستخدام csc.exe. يمكنك أيضاً بناء هذا المثال في Visual Studio عن طريق لصق التعليمات البرمجية في مشروع جديد. لمزيد من المعلومات، راجع: كيفية القيام بما يلي: ترجمة و تشغيل مثال التعليمات برمجية لنماذج Windows الكامل باستخدام ‏‫Visual Studio.

راجع أيضًا:

المرجع

WebBrowser

WebBrowser.Document

WebBrowser.ObjectForScripting

موارد أخرى

عنصر التحكم بـ Windows Forms) WebBrowser)