|
Rank: Member Groups: Member
Joined: 9/11/2014 Posts: 17
|
Hi eo_support. I using WebView_NewWindow event in my code:
Code: C#
private void WebView_NewWindow(object sender, NewWindowEventArgs e)
{
CreateNewTabPage(CreateTabWebView(e.WebView), e.TargetUrl);
e.Accepted = true;
}
private WebView CreateTabWebView(WebView webview)
{
webview.BeforeDownload += new BeforeDownloadHandler(WebView_BeforeDownload);
webview.IsLoadingChanged += new EventHandler(TabWebView_IsLoadingChanged);
webview.UrlChanged += new EventHandler(WebView_UrlChanged);
webview.LoadCompleted += new NavigationTaskEventHandler(TabWebView_LoadCompleted);
webview.NewWindow += new NewWindowHandler(WebView_NewWindow);
webview.StatusMessageChanged += new EventHandler(WebView_StatusMessageChanged);
return webview;
}
But webview in new tab don't fire LoadCompleted event. So I change my code flowing:
Code: C#
private void WebView_NewWindow(object sender, NewWindowEventArgs e)
{
CreateNewTabPage(CreateTabWebView(new WebView()), e.TargetUrl);
}
private WebView CreateTabWebView(WebView webview)
{
webview.BeforeDownload += new BeforeDownloadHandler(WebView_BeforeDownload);
webview.IsLoadingChanged += new EventHandler(TabWebView_IsLoadingChanged);
webview.UrlChanged += new EventHandler(WebView_UrlChanged);
webview.LoadCompleted += new NavigationTaskEventHandler(TabWebView_LoadCompleted);
webview.NewWindow += new NewWindowHandler(WebView_NewWindow);
webview.StatusMessageChanged += new EventHandler(WebView_StatusMessageChanged);
return webview;
}
Remove e.Accepted = true from WebView_NewWindow event, then WebView_NewWindow event fired, And I made my intentions. But I worry that the new WebView I created different with the webview in e.WebView parameter, so I lost some important properties. Please show me know my way is correct or not? Sorry for my english is not fluent!
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,196
|
Hi,
You must use the existing WebView instead of creating a new WebView when handling NewWindow event. However LoadCompleted event is ONLY fired for Urls that you explicitly loaded with LoadUrl/LoadRequest (setting the WebView's Url calls LoadUrl so that will work too). The reason that you won't get a LoadCompleted event for the initial load for a NewWindow WebView is because the Url loaded inside that WebView is not loaded by your code --- It's loaded by the user. This is the same as user clicking a link inside the WebView. In that case the WebView will navigate to the new link, but it will not fire LoadCompleted event because this is not a load initiated by LoadUrl/LoadRequest.
IsLoadingChanged event does fire in all cases. So you might want to rely on that event instead.
Thanks!
|
|
Rank: Member Groups: Member
Joined: 9/11/2014 Posts: 17
|
Hi eo_support! My way create a new webview, I see it run normal with fully cookies, session...I don't understand what's wrong?
|
|
Rank: Administration Groups: Administration
Joined: 5/27/2007 Posts: 24,196
|
Hi, The difference is, if you use the following code to open a new window:
Code: JavaScript
var new_window = window.open(url, name);
Then new_window would be null if you create a new WebView. Thanks
|
|
Rank: Member Groups: Member
Joined: 9/11/2014 Posts: 17
|
I create new WebView, then assign url
Code: C#
private void WebView_NewWindow(object sender, NewWindowEventArgs e)
{
CreateNewTabPage(CreateTabWebView(), e.TargetUrl);
}
private void CreateNewTabPage(WebView webview, string url)
{
TabPage tab = new TabPage();
mainTabControl.TabPages.Add(tab);
WebControl wctr = new WebControl();
wctr.Dock = DockStyle.Fill;
wctr.WebView = webview;
tab.Controls.Add(wctr);
tab.ToolTipText = url;
mainTabControl.SelectedTab = tab;
webview.Url = url;
}
So new webview will open url from e.TargetUrl
|
|