C# webview2 navigatetostring- טעינת טקסט בפקד
-
ניסיתי לעשות פקודת navigate to string בפקד webview בC# wfp
למעישה זה מחזיר לי שגיאה שהcore לא נטען
עשיתי EnsureCoreWebView2Async( );
וגם לא עזר
מישהו יודע מה צריך לעשות כדי להפעיל פקודה זו כראוי?
תודה -
@dovid כתב בC# webview2 navigatetostring- טעינת טקסט בפקד:
תקרא לה מייד אחרי הInitializeComponent כדי שזה "יספיק" להיטען,
או שתוסיף לפניה await (ותוסיף למתודה async).או לחילופין תקרא לה ככה:
()EnsureCoreWebView2Async().Wait
, זה יעצור את הטרד הנוכחי עד שהפונקציה תסתיים.(מומלץ מאוד להשתמש ב async / await)
-
@dovid
פרוייקט נקי עובד.
מסתבר שהבעיה דוקא כשאני עושה בvsto
מצו"ב המידע שביקשת
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using Word = Microsoft.Office.Interop.Word; using Office = Microsoft.Office.Core; using Microsoft.Office.Tools.Word; using System.Windows; using System.Windows.Forms; namespace TestVstoWebView { public partial class ThisAddIn { private Microsoft.Office.Tools.CustomTaskPane taskPane; private void ThisAddIn_Startup(object sender, System.EventArgs e) { UserControl hostControl = new UserControl(); hostControl.Load += HostControl_Load; taskPane = this.CustomTaskPanes.Add(hostControl, "תורת אמת"); taskPane.Visible = true; taskPane.Width = 450; } private void HostControl_Load(object sender, EventArgs e) { Window window = new Window(); webviewcontrol webviewcontrol = new webviewcontrol(); window.Content = webviewcontrol; window.Show(); } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { } #region VSTO generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InternalStartup() { this.Startup += new System.EventHandler(ThisAddIn_Startup); this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); } #endregion } }
<UserControl x:Class="TestVstoWebView.webviewcontrol" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:TestVstoWebView" xmlns:webview ="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <webview:WebView2 x:Name="webView"/> </Grid> </UserControl>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace TestVstoWebView { /// <summary> /// Interaction logic for webviewcontrol.xaml /// </summary> public partial class webviewcontrol : UserControl { public webviewcontrol() { InitializeComponent(); InitializeWebview(); } async void InitializeWebview() { await webView.EnsureCoreWebView2Async(); webView.NavigateToString("test string"); } } }
יצויין שכנ"ל אותו הקוד בדיוק עובד בפרוייקט רגיל הבעיה מתחילה רק בvsto
-
כתבת "לא עוזר" לא יכולת לומר שיש שגיאה?
הבעיה מובאת פה ומוסבר שמה שלתוסף חסרה הרשאה לגשת לקבצים, והפתרון שמובא שמה ועזר לשואל הוא להגדיר לתיקיה עם הרשאות כתיבה (עם הפניה לפה), לא הבנתי לגמרי איך, תנסה ככה:var loc = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); await CoreWebView2Environment.CreateAsync(userDataFolder: loc); await wv.EnsureCoreWebView2Async(); wv.NavigateToString("https://google.com");
-
עשיתי ככה ועבד
string tempWebCacheDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); webView2Environment = await CoreWebView2Environment.CreateAsync(userDataFolder: tempWebCacheDir); await browser.EnsureCoreWebView2Async(webView2Environment); browser.NavigateToString("aaa");
אבל כשאני סוגר את וורד אני מקבל שגיאה זו
System.InvalidCastException HResult=0x80004002 Message=לא ניתן לבצע cast של אובייקט COM מסוג 'System.__ComObject' לסוג ממשק 'Microsoft.Web.WebView2.Core.Raw.ICoreWebView2Controller'. פעולה זו נכשלה מכיוון שקריאת ה- QueryInterface לרכיב ה- COM עבור הממשק עם IID '{4D00C0D1-9434-4EB6-8078-8697A560334F}' נכשלה עקב השגיאה הבאה: No such interface supported (חריג מ- HRESULT: 0x80004002 (E_NOINTERFACE)). Source=mscorlib StackTrace: at System.StubHelpers.StubHelpers.GetCOMIPFromRCW(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) at Microsoft.Web.WebView2.Core.Raw.ICoreWebView2Controller.get_CoreWebView2() at Microsoft.Web.WebView2.Core.CoreWebView2Controller.get_CoreWebView2() in Microsoft.Web.WebView2.Core\CoreWebView2Controller.cs:line 58 at Microsoft.Web.WebView2.Wpf.WebView2.Uninitialize(Boolean browserCrashed) at Microsoft.Web.WebView2.Wpf.WebView2.Dispose(Boolean disposing)
-
פתרון מאולתר:
אני יוצר list ששומר את כל הwebviews בתוך thisaddin ואז כך שהתוכנה מתעלמת מכל שגיאה שקורית בסגירת הwebviewprivate void ThisAddIn_Shutdown(object sender, System.EventArgs e) { try { foreach (WebView2 webView in webviewlist) { webView.Dispose(); } } catch (Exception){ } }