2017-02-24 1 views
0

Qu'est-ce que je fais mal?Comment obtenir un message d'alerte de site Web UWP WebView

J'ai utilisé w3schools.com pour les tests.

webView.Navigate(new Uri("https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_alert")); 

fichier Package.appxmanifest

enter image description here

NavigationCompleted

private async void webView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args) 
{ 
    string result = await sender.InvokeScriptAsync("eval", new string[] { "window.alert = function (AlertMessage) {window.external.notify(AlertMessage)}" }); 
} 

ScriptNotify

private async void WebView_ScriptNotify(object sender, NotifyEventArgs e) 
{ 
    MessageDialog dialog = new MessageDialog(e.Value); 
    await dialog.ShowAsync(); 
} 
+0

Qu'espérez-vous arriver, et que fait-il à la place? – Adam

+0

Je veux recevoir un message d'alerte [comme ceci (capture d'écran)] (https://i.stack.imgur.com/IHbud.png) –

Répondre

0

Le problème est lié ici à la page Web (https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_alert) que vous utilisez pour tester.

Si vous inspectez sur cette page, vous trouverez le bouton "Essayer" dans un iframe nommé "iframeResult".

<iframe frameborder="0" id="iframeResult" name="iframeResult"> 
 
    <!DOCTYPE html> 
 
    <html> 
 
    <head></head> 
 
    <body contenteditable="false"> 
 
     <p>Click the button to display an alert box.</p> 
 
     <button onclick="myFunction()">Try it</button> 
 
     <script> 
 
      function myFunction() { 
 
       alert("Hello! I am an alert box!"); 
 
      } 
 
     </script> 
 
    </body> 
 
    </html> 
 
</iframe>

Ainsi, votre code ne fonctionnera pas en cliquant sur "Essayez" comme vous surchargez window.alert qui est la méthode alert dans le cadre de parent. Et pour rendre votre travail de code, vous pouvez simplement changer à iframeResult.window.alert comme ce qui suit:

private async void webView_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args) 
{ 
    string result = await sender.InvokeScriptAsync("eval", new string[] { "iframeResult.window.alert = function(AlertMessage) {window.external.notify(AlertMessage)}" }); 
} 
+0

Ceci ne fonctionnera pas sur les iframes de tout autre site, car l'identifiant 'iframeResult' est spécifique à w3schools. – jerone