【问题标题】:Alert dialog from <webview> was blocked来自 <webview> 的警报对话框被阻止
【发布时间】:2015-05-30 17:26:40
【问题描述】:

当我使用 webview 并显示此错误时,Dart 不显示警告对话框:

:警告对话框被阻止。 (扩展::webViewEvents:225)

:确认对话框被阻止。 (扩展::webViewEvents:225)

有谁知道如何绕过问题或如何捕获错误?

谢谢。

对不起,我的英语不好。

编辑

使用的代码:

Element webview= querySelector("#webview");
Map<String,String> map=new Map();
map["src"]=urlWebView;
webview.attributes.addAll(map);
webview.style.visibility="visible";

DartEditor 版本 = STABLE build 45396

SDK的版本号= 1.10.0

webview 加载一个页面,该页面适用于不是我创建的 js。

使用这个时出现错误:

alert("***")

【问题讨论】:

  • 您能否添加一些显示您实际尝试完成的内容并允许重现问题。你使用的是什么 Dart 版本。您在什么平台上运行您的应用程序。我假设您正在运行dart2jspub build 的输出。您使用哪些选项来构建 JS 输出?
  • 另外,请不要在标题中添加本质上的标签。这就是 标签 的用途。

标签: javascript webview dart google-chrome-app


【解决方案1】:

关于@Xan 答案的更多说明:

你需要从 webview 监听对话框事件,请阅读代码中的 cmets 以便更好地理解,再次,我使用的是 nwjs,所以你可以用你的语言实现类似的版本:

    //lets listen to alert dom and enable it 
    webview.addEventListener('dialog',function(e){

   //message type 
   messageType = e.messageType;

   messageText = e.messageText;

   DialogController = e.dialog;


   //lets checki if alert
   if(messageType == 'alert'){
     window.alert(messageText);
   }//emd if 

   //if confirm
   else if(messageType == 'confirm'){

    //confirm
    var confirm =  window.confirm(messageText);

    //get confirm bool and send to controller
    if(confirm == true){

       //if true send okay to browser
       DialogController.ok();
    }else{

      //send cancel with to send false false
      DialogController.cancel();
    }//end if

   }//end if confirm

  //lastly if its prompt 
  else if(messageType == 'prompt'){

     //get user Input 
     promptInput = window.prompt(messageText);

     //if null , then means the user clicked cancel 
     if(promptInput == null){

          //tell browser to cancel 
          DialogController.cancel();
     }else{
         //feed browser with input data 
         DialogController.ok(promptInput);
     }
  }//end if prompt

});//end dialog test 

【讨论】:

  • 备注:window.alert 和朋友在 Chrome 应用程序中会失败,而不是 nw.js
【解决方案2】:

默认情况下,webview 无法显示这些内容。

您需要捕获dialog event,为其显示您自己的用户界面(请记住,应用程序can't use alert and friends,所以&lt;dialog&gt; 是一个不错的选择),然后将响应传回DialogController

【讨论】:

  • 抱歉,我尝试使用此代码捕获错误但不起作用:webview.addEventListener("confirm", (Event e){ e.preventDefault(); print(" test"); }); 有什么想法吗?
  • @maluma 事件我们总是dialog,对话框的类型是一个参数。没有confirm 事件。
  • 谢谢。完成后立即添加解决方案的代码。
  • 我很抱歉,但我无法继续。我能够拦截对话框,但返回的事件没有给我信息。 'webview.addEventListener("dialog",(Event e){ e.preventDefault(); } );'
  • 您可能需要提出一个新问题。
猜你喜欢
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多