سؤال

لقد طورت OSK بسيط إلى حد ما لتطبيق كشك لدينا. يعمل عن طريق فتح في أحداث OnFocus التي تم إطلاقها بواسطة TextBoxes في تطبيقنا .NET. المشكلة هي أننا نحاول الاندماج مع خدمة تسجيل الدخول واحدة مما يعني أننا سنفتح عنصر تحكم WebBrowser للتعامل مع مصادقة الطرف الثالث. نظرا لأن صناديق النص الخاصة بصفحة SSO هي داخل عنصر تحكم المستعرض، فأنا غير متأكد تماما من أفضل طريقة لاستخدام OSK الموجودة أو إذا أمكنك حتى.

إن أفكاري الأولية هي تجربة نوع من حقن JavaScript من أجل إضافة الأحداث التي يمكن أن يستجيب فيها طلبي. ثم يجب أن أكون قادرا على معرفة متى يتلقى مربع نص التركيز، وفتح OSK. بمجرد إغلاق OSK، يمكنني تحديث حقل النموذج بالقيمة التي تمت كتابتها. مشكلتي مع هذا هو أنه يبدو هشا تماما. يمكن أن يفشل تغيير في HTML / JS على صفحة SSO عملية تسجيل الدخول لجميع الأكشاك.

الخيار الآخر الذي أراه هو إلغاء OSK لدي واستخدام واحد من المستوى الأدنى. المشكلة التي أراها مع هذا النهج هي ضعف البرنامج لبرنامج OSK يبدو أنه يجد. سأحتاج بشكل أساسي إلى إطلاق إكس طرف ثالث كلما كنت بحاجة إلى الحصول على إدخال لوحة المفاتيح من المستخدم ولن يبدو أنه ناعم من التكامل حيث يمكنني الحصول على الحل الحالي.

يمكنني الذهاب مع مزيج من الاثنين، باستخدام OSK لدينا عناصر تحكم WinForms العادية والتبديل إلى OSK الطرف الثالث كلما أحتاج إلى استخدام WebControl، لكنني أعتقد أن الجميع قد يرون المشكلة في هذا النهج.

أي نصيحة / اقتراحات حول طريقة الذهاب، وأي مساعدة في تنفيذ حقن جافا سكريبت عام تسمح لي أن تستخدم أوسك الخاص بي الحالي سيكون رائعا!

هل كانت مفيدة؟

المحلول

private void Form1_Load(object sender, EventArgs e)
{
    webBrowser1.ObjectForScripting = this;
    webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(LoadComplete);
    webBrowser1.Navigate("http://www.google.com");
}

public void LoadComplete(object sender, WebBrowserDocumentCompletedEventArgs args)
{
    foreach(HtmlElement input in webBrowser1.Document.GetElementsByTagName("input"))
    {
        if (input.GetAttribute("type").ToLower() == "text")
        {
            input.Click += new HtmlElementEventHandler(Clicked);
        }
    }
}

public void Clicked(object sender, HtmlElementEventArgs args)
{
    // Show OSK, Get Results Text
        (sender as HtmlElement).SetAttribute("value", oskText);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top