דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עבודה עם JS דרך C#

עבודה עם JS דרך C#

מתוזמן נעוץ נעול הועבר תכנות
52 פוסטים 3 כותבים 3.7k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • D מנותק
    D מנותק
    davidnead
    כתב ב נערך לאחרונה על ידי
    #1

    אני מעוניין למצוא את הדרך הפשוטה והקצרה להריץ קוד JS מתוך אפליקציית WPF בנכתבת בC#.

    הפעולות שאני מבקש הם כדלהלן:

    1. ליצור אובייקט webBrouser
    2. לטעון לתוכו URL מסויים
    3. להוסיף אל הדף הטעון כעת קוד JS
    4. לקרוא ע"י קוד C# לפונקציית JS מסויימת - ולמסור לה ארגומנטים
    5. לקבל בחזרה פלט מהפונקציה הזו

    מה ניסיתי עד עכשיו:
    שלב 1 ו2 כמובן ביצעתי.
    שלב 3 - הוספת הקוד אל הדף, נתקלתי בבעיה. מצאתי כמה שיטות. ניסיתי להשתמש בהוספת אלמנט "<script>" והוספת קוד אל תוכו באמצעות:

            var Document2 = (IHTMLDocument2)wbTest.Document;
            var scriptElement = Document2.createElement("script");
            scriptElement.insertAdjacentHTML("afterBegin", "js code");
    

    זה לא הצליח, האלמנט לא נוצר בדף.

    ניסיתי להוסיף את האלמנט בצורת מחרוזת HTML בשיטה הבאה:

            HTMLDocument document = (HTMLDocument)wbTest.Document;
            IHTMLElement body = (IHTMLElement)document.body;
            body.insertAdjacentHTML("afterBegin", "סתם קוד HTML נוסף לבדיקה<script>alert (123) function test (a,b){alert(123)}</script>");
    

    האלמנט וקוד הHTML נוצר, אולם קוד הJS שבתוכו לא הופעל. יש לשים לב ששמתי גם קוד שמופעל אוטומטית וגם קוד בפונקציה שדורש קריאה.

    ניסיתי את השיטה הבאה שמפעילה קוד JS באופן ישיר:

            var Document2 = (IHTMLDocument2)wbTest.Document;
            string jsCode = "js code";
            Document2.parentWindow.execScript(jsCode);
    

    אלא שבשיטה זו אין לי אפשרות לקרוא לפונקציה מסויימת, לא לשלוח ארגומנטים, ולא לקבל פלט

    ניסתי לקרוא לJS בצורה הבאה:

            object[] args = { tb1.Text, tb2.Text };
    
            wbTest.InvokeScript("test", args);
    

    בצורה הזו אני יכול לקרוא לפנוקציה ולמסור ארגומנטים, אבל, זה עבד רק אם הטמעתי מראש את קוד הJS בדף אינטרנט שאני יצרתי, מה שלא עוזר לי.

    יש לציין, שאם אמצא דרך לבצע את שאר השלבים, לקבל פלט אפשר בצורת שינוי בDOM ואחרי זה לקרוא אותו.

    תודה מראש

    מנצפךמ תגובה 1 תגובה אחרונה
    1
    • מנצפךמ מנותק
      מנצפךמ מנותק
      מנצפך
      השיב לdavidnead ב נערך לאחרונה על ידי
      #2

      @davidnead מתוך קוד שכתבתי פעם

                          HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
      
                          IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
      
                          element.text = "function alertHello() {alert('hello');};";
      
                          ele.AppendChild(scriptEl);
      
                          webBrowser1.Document.InvokeScript("alertHello");
      

      ה ele צריך להיות אובייקט בצורה כזו:

      HtmlElement ele in webBrowser1.Document.GetElementsByTagName("div")
      

      כשתריץ את הקובץ, הדפדפן יפעיל alert "hello".

      תגובה 1 תגובה אחרונה
      3
      • D מנותק
        D מנותק
        davidnead
        כתב ב נערך לאחרונה על ידי
        #3

        תודה. יצירת הele משום מה לא הצליחה. בסוף הצלחתי בעקבות הקוד שלך עם הקוד הפשוט הבא:

                HtmlElement scriptJQ = wbTest.Document.CreateElement("script");
                scriptJQ.InnerText = WindowsFormsApp1.Properties.Resources.JQUERY;
                wbTest.Document.Body.AppendChild(scriptJQ);
        

        אלא שזה התברר ככושל למטרה שרציתי. מהסיבה הפשוטה שהIE דפוק לגמרי, ולא יכול להריץ אפילו סקריפט אחד נורמלי. גם אחרי ששינתי את ההגדרה כך שיציג את הגרסה האחרונה של הIE.

        אז עכשיו אני רוצה להשתמש לאותה מטרה באובייקט הדפדפן של cefSharp. אלא שלמרות שהצלחתי להתקינו כיאות ולעשות שימוש ניסיון באובייקט, איני יוד'ע להשתמש בו כיאות למטרה שביקשתי - למרות שהוא מיועד לה באופן טבעי יותר. לא הצלחתי לעקוב וליישם את ההדרכות עקב חוסר ניסיוני בC#.

        תגובה 1 תגובה אחרונה
        2
        • מנצפךמ מנותק
          מנצפךמ מנותק
          מנצפך
          כתב ב נערך לאחרונה על ידי
          #4

          @davidnead אני בדיוק עובד על זה. אהיה ריתך בקשר.

          D תגובה 1 תגובה אחרונה
          1
          • D מנותק
            D מנותק
            davidnead
            השיב למנצפך ב נערך לאחרונה על ידי
            #5

            @מנצפך אמר בעבודה עם JS דרך C#:

            @davidnead אני בדיוק עובד על זה. אהיה ריתך בקשר.

            תודה, מעולה. אני זקוק לקוד ברמה הבסיסית ביותר: הטענת פונקציה, קריאה, וקבלת תגובה. בהדרכה שם התקשתי אפילו להבחין מה קוד C# ומה קוד JS.
            המטרה שלי היא פשוט להריץ JS מאפליקציה שולחנית ללא שימוש בדפדפן ה"אמיתי".

            תגובה 1 תגובה אחרונה
            1
            • מנצפךמ מנותק
              מנצפךמ מנותק
              מנצפך
              כתב ב נערך לאחרונה על ידי
              #6

              winForm?

              תגובה 1 תגובה אחרונה
              0
              • מנצפךמ מנותק
                מנצפךמ מנותק
                מנצפך
                כתב ב נערך לאחרונה על ידי
                #7

                על איזה הדרכה אתה מדבר?

                תגובה 1 תגובה אחרונה
                0
                • מנצפךמ מנותק
                  מנצפךמ מנותק
                  מנצפך
                  כתב ב נערך לאחרונה על ידי
                  #8

                  איזה VS?

                  תגובה 1 תגובה אחרונה
                  0
                  • D מנותק
                    D מנותק
                    davidnead
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @מנצפך
                    האמת לא מאוד משנה לי winForm או WPF מדובר על אפליקציה די פשוטה. עדיף WPF אבל את ההקנה עשיתי על winForm כי זה ההדרכה זם.

                    וזה מביא לשאלה השניה: ההדרכה באתר שלהם+תיעוד על ההתקנה שראיתי היכן שהוא ברשת, לא משהו מפורט.

                    VS 2017

                    תגובה 1 תגובה אחרונה
                    1
                    • מנצפךמ מנותק
                      מנצפךמ מנותק
                      מנצפך
                      כתב ב נערך לאחרונה על ידי
                      #10

                      דבר ראשון תגדיר את ה solution על 64
                      לחצן ימיני על ה solution
                      configration manager

                      D תגובה 1 תגובה אחרונה
                      2
                      • D מנותק
                        D מנותק
                        davidnead
                        השיב למנצפך ב נערך לאחרונה על ידי
                        #11

                        @מנצפך אמר בעבודה עם JS דרך C#:

                        דבר ראשון תגדיר את ה solution על 64
                        לחצן ימיני על ה solution
                        configration manager

                        עשיתי את זה, זה היה בהוראות ההתקנה. כאמור הצלחתי להתקין נכון. אבל את השימוש (קריאה לJS ותגובה) לא הצלחתי. רק יצירת האובייקט בדף.

                        תגובה 1 תגובה אחרונה
                        2
                        • מנצפךמ מנותק
                          מנצפךמ מנותק
                          מנצפך
                          כתב ב נערך לאחרונה על ידי
                          #12

                          אתה מצליח להפעיל אתר?

                          D תגובה 1 תגובה אחרונה
                          0
                          • מנצפךמ מנותק
                            מנצפךמ מנותק
                            מנצפך
                            כתב ב נערך לאחרונה על ידי
                            #13

                            תעשה:

                              var script = string.Format("alert('he')");
                                 
                            chromeBrowser.GetMainFrame().ExecuteJavaScriptAsync(script);
                            
                            D תגובה 1 תגובה אחרונה
                            3
                            • D מנותק
                              D מנותק
                              davidnead
                              השיב למנצפך ב נערך לאחרונה על ידי
                              #14

                              @מנצפך אמר בעבודה עם JS דרך C#:

                              אתה מצליח להפעיל אתר?

                              כן. ואם תיתן לי עוד הצבעה - המערכת לא תציק לי עם פסקי זמן בין תשובה לתשובה

                              תגובה 1 תגובה אחרונה
                              4
                              • D מנותק
                                D מנותק
                                davidnead
                                השיב למנצפך ב נערך לאחרונה על ידי
                                #15

                                @מנצפך אמר בעבודה עם JS דרך C#:

                                תעשה:

                                  var script = string.Format("alert('he')");
                                     
                                chromeBrowser.GetMainFrame().ExecuteJavaScriptAsync(script);
                                

                                chromeBrowser - זה המופע של הדפדפן?

                                מנצפךמ תגובה 1 תגובה אחרונה
                                1
                                • D מנותק
                                  D מנותק
                                  davidnead
                                  כתב ב נערך לאחרונה על ידי
                                  #16

                                  System.Exception: 'Browser is not yet initialized. Use the IsBrowserInitializedChanged event and check the IsBrowserInitialized property to determine when the browser has been intialized

                                  D תגובה 1 תגובה אחרונה
                                  0
                                  • מנצפךמ מנותק
                                    מנצפךמ מנותק
                                    מנצפך
                                    השיב לdavidnead ב נערך לאחרונה על ידי
                                    #17

                                    @davidnead YES

                                    תגובה 1 תגובה אחרונה
                                    0
                                    • D מנותק
                                      D מנותק
                                      davidnead
                                      כתב ב נערך לאחרונה על ידי
                                      #18

                                      ולמה השגיאה?

                                      תגובה 1 תגובה אחרונה
                                      0
                                      • מנצפךמ מנותק
                                        מנצפךמ מנותק
                                        מנצפך
                                        כתב ב נערך לאחרונה על ידי
                                        #19

                                        איזו?

                                        תגובה 1 תגובה אחרונה
                                        0
                                        • D מנותק
                                          D מנותק
                                          davidnead
                                          השיב לdavidnead ב נערך לאחרונה על ידי
                                          #20

                                          @davidnead אמר בעבודה עם JS דרך C#:

                                          System.Exception: 'Browser is not yet initialized. Use the IsBrowserInitializedChanged event and check the IsBrowserInitialized property to determine when the browser has been intialized

                                          זו

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          • 3
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום