Answered by:
WebView external web page

Question
-
I have a webView with an external html page loaded in it.
Is it possible to somehow control any event inside that webView so that i can open an external browser when the user click one of buttons?
The application is written in C# and XAML
Thursday, June 5, 2014 1:04 PM
Answers
-
Have you tried with WebView.ScriptNotify event?
- Ram
If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".- Marked as answer by adrianadrianp Friday, June 6, 2014 3:52 PM
Thursday, June 5, 2014 1:11 PM -
Hi,
You can follow up these steps:
1.Add the following Javascript code to your HTML:
"<script type=\"text/javascript\">for (var i = 0; i < document.links.length; i++) { document.links[i].onclick = function(){window.external.notify(\"LaunchLink:\" + this.href); return false; } }</script>"
This adds an onclick handler to every link (<a href="..."></a>) on the page. window.external.notify is a Javascript method that works in the Webview.
2.Add the ScriptNotify event handler to the webview:
MyWebview.ScriptNotify += WebView_ScriptNotify;
3.Declare the event handler:
async private void WebView_ScriptNotify(object sender, NotifyEventArgs e) { try { string data = e.Value; if (data.ToLower().StartsWith("launchlink:")) { await Launcher.LaunchUriAsync(new Uri(data.Substring("launchlink:".Length), UriKind.Absolute)); } } catch (Exception) { // Could not build a proper Uri. Abandon. } }
And you can refer to the links to see remarks to allowed Uris whitelist:
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify
Remarks
A hosted HTML page can fire the ScriptNotify event in your Windows Store app when the page calls window.external.notify and passes a string parameter.
Note Because this event is initiated by external code, you should be careful about what you put in the event handler. To prevent malicious scripts from exploiting this event, be sure to enable it only for trusted URIs, as described below.
Best Wishes!
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey. Thanks<br/> MSDN Community Support<br/> <br/> Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.- Marked as answer by adrianadrianp Friday, June 6, 2014 3:51 PM
Friday, June 6, 2014 5:31 AM
All replies
-
Have you tried with WebView.ScriptNotify event?
- Ram
If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".- Marked as answer by adrianadrianp Friday, June 6, 2014 3:52 PM
Thursday, June 5, 2014 1:11 PM -
The event is not firing...I guess I would have to get some access to the html page to use some script thereThursday, June 5, 2014 1:19 PM
-
Hope you went through the REMARKS section in the documentation.
- Ram
If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".Thursday, June 5, 2014 2:01 PM -
Hi,
You can follow up these steps:
1.Add the following Javascript code to your HTML:
"<script type=\"text/javascript\">for (var i = 0; i < document.links.length; i++) { document.links[i].onclick = function(){window.external.notify(\"LaunchLink:\" + this.href); return false; } }</script>"
This adds an onclick handler to every link (<a href="..."></a>) on the page. window.external.notify is a Javascript method that works in the Webview.
2.Add the ScriptNotify event handler to the webview:
MyWebview.ScriptNotify += WebView_ScriptNotify;
3.Declare the event handler:
async private void WebView_ScriptNotify(object sender, NotifyEventArgs e) { try { string data = e.Value; if (data.ToLower().StartsWith("launchlink:")) { await Launcher.LaunchUriAsync(new Uri(data.Substring("launchlink:".Length), UriKind.Absolute)); } } catch (Exception) { // Could not build a proper Uri. Abandon. } }
And you can refer to the links to see remarks to allowed Uris whitelist:
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.scriptnotify
Remarks
A hosted HTML page can fire the ScriptNotify event in your Windows Store app when the page calls window.external.notify and passes a string parameter.
Note Because this event is initiated by external code, you should be careful about what you put in the event handler. To prevent malicious scripts from exploiting this event, be sure to enable it only for trusted URIs, as described below.
Best Wishes!
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey. Thanks<br/> MSDN Community Support<br/> <br/> Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.- Marked as answer by adrianadrianp Friday, June 6, 2014 3:51 PM
Friday, June 6, 2014 5:31 AM -
I cannot intercept the click events. Are there any conditions for this to happen?
I followed all the steps but it does not steps through my event handler.
Thanks
- Edited by adrianadrianp Friday, June 6, 2014 1:40 PM wrong type
Friday, June 6, 2014 1:39 PM -
Working... thanks! Script Notify is the solutionFriday, June 6, 2014 3:52 PM