【问题标题】:UIWebView: Can I disable the javascript alert() inside any web page?UIWebView:我可以在任何网页中禁用 javascript alert() 吗?
【发布时间】:2011-03-24 22:43:16
【问题描述】:

我正在使用UIWebView 加载网址。

在该 URL 的页面内,它使用 alert("whatever msg") 作为 JavaScript。我的UIWebView 将弹出一个窗口并显示该警报消息。

有没有办法禁用这种弹出窗口或 JavaScript 警告窗口?

【问题讨论】:

    标签: javascript ios uiwebview


    【解决方案1】:
    let script = """
                    window.alert=window.confirm=window.prompt=function(n){},
                    [].slice.apply(document.querySelectorAll('iframe')).forEach(function(n){if(n.contentWindow != window){n.contentWindow.alert=n.contentWindow.confirm=n.contentWindow.prompt=function(n){}}})
                    """
        webView.evaluateJavaScript(script, completionHandler: nil)
    

    【讨论】:

      【解决方案2】:

      由于 UIWebView 将所有 Javascript 警报转换为本机 UIAlertViews,因此在本机端阻止它相当简单。查看UIAlertView.h,只有一种显示警报的公共方法被方便地称为:- (void)show;

      @interface UIAlertView (Blocker)
      @end
      
      #import "UIAlertView+Blocker.h"
      
      @implementation UIAlertView (Blocker)
      
      - (void)show {
         return;
      }
      @end
      

      您可以在这里找到答案:https://stackoverflow.com/a/21698251/2377378

      【讨论】:

        【解决方案3】:

        您可以将window.alert 绑定到另一个函数。所以:

        window.alert = function() {
          //does nothing so effectively "disables" alert
        };
        

        确保在调用任何警报之前执行此操作。这样做的好处是您可以自定义向用户显示消息的方式。因此,您可以覆盖 window.alert 以登录到控制台(出于调试目的),或者您可以在页面上呈现它(使用灯箱或类似的东西)。

        【讨论】:

        • 没问题。 pop850 的答案可能是您想要接受的,因为它直接解决了您的问题。
        • 从我的角度来看,这个答案更优雅地解决了这个问题,因为var a = null; a(); 是一个 JavaScript 运行时错误。
        【解决方案4】:

        在您的 Web 视图加载其内容后添加它

        [MyWebView stringByEvaluatingJavaScriptFromString:@"window.alert=null;"];
        

        【讨论】:

        • 非常有帮助,它正在工作。我已经提到我必须将此消息放在 webViewDidStartLoad 委托方法中,仅供其他可能想知道的人使用
        • 这对我不起作用,因为显示警报的 JS 是在页面渲染完成之前执行的。我最终在本机级别阻止了它:stackoverflow.com/a/21698251/154915
        • 即使放在webViewDidStartLoad中也不行
        猜你喜欢
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 2011-02-19
        • 2010-10-15
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多