在 UIWebView 上定义事件

Posted

技术标签:

【中文标题】在 UIWebView 上定义事件【英文标题】:Defining event on UIWebView 【发布时间】:2013-02-19 19:06:26 【问题描述】:

请原谅我对 ios 开发相当陌生(那将是非常新的)。

我刚刚实现了原生 Facebook 授权,现在我想将我的 access_token 传递给 UIWebView 中的本地 html 文件。为此,我在 html 文件中创建了一个 javascript 对象,并带有一个接收 access_token 作为参数的 init 函数。现在我只需要从外部调用该函数。一些研究让我找到了[UIWebView stringByEvaluatingJavaScriptFromString:(NSString *)] - 但在页面加载之前不应调用它。

在我的ViewController.m 中,我定义了一个- (void)updateView,在其中我对webView 发出请求,这是一个UIWebView。我现在想在这个特定请求完成后立即执行一个 JavaScript 字符串。我该怎么做?

- (void)updateView 
    AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
    if (appDelegate.session.isOpen) 
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://mydomainwuhuu/mobile?o=Auth&accessToken=%@", appDelegate.session.accessToken]];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [webView loadRequest:request];
        [webView stringByEvaluatingJavaScriptFromString:@"window.alert('test')"];
    

这段代码没有这样做,我认为是因为我在页面加载完成之前调用了 JavaScript?我该如何解决?

【问题讨论】:

【参考方案1】:

UIWebView 有委托方法见this。针对您的情况,请使用– webViewDidFinishLoad:

【讨论】:

怎么样?现在我有类似的东西:- (void)webViewDidFinishLoad:(UIWebView *)thisWebView [thisWebView stringByEvaluatingJavaScriptFromString:@"wuff.init()"]; 但它不执行该功能.. 在那个函数里面加一个alert,能不能贴一下JS函数代码 我在 wuff.init() 函数中包含了一个 window.alert("test") 。问题不在于 JavaScript。如果我在 Web 浏览器中打开 html 文件并执行 wuff.init(),则会显示弹出窗口.. 见this。尝试用JS实现。 这不是一个选项,因为我需要从 AppDelegate 传递的变量。请参阅我在先前评论中发布在 Pastebin 上的代码 :)【参考方案2】:

我以前也遇到过同样的问题。我最终只包含了一个“完成”按钮,并在 IBAction 按钮调用中包含了 stringbyevalatingjavascript 函数。

当时就成功了。

【讨论】:

我对此不感兴趣。它必须在加载时自动发生。

以上是关于在 UIWebView 上定义事件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 3 中的 UIWebview 中的链接打开另一个视图?

使用WKWebView替换UIWebView

自动布局、约束和旋转

在 uiwebview 中播放 youtube 视频。如何处理“完成”按钮?

如何清除/禁用 UIWebView 的浏览历史记录

iOS UIWebView 允许所有三方cookie