אני מעוניין למצוא את הדרך הפשוטה והקצרה להריץ קוד JS מתוך אפליקציית WPF בנכתבת בC#.
הפעולות שאני מבקש הם כדלהלן:
- ליצור אובייקט webBrouser
- לטעון לתוכו URL מסויים
- להוסיף אל הדף הטעון כעת קוד JS
- לקרוא ע"י קוד C# לפונקציית JS מסויימת - ולמסור לה ארגומנטים
- לקבל בחזרה פלט מהפונקציה הזו
מה ניסיתי עד עכשיו:
שלב 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 ואחרי זה לקרוא אותו.
תודה מראש