我应该用哪种方法注入javascript? (stringByEvaluatingJavaScriptFromString)

时间:2012-02-29 17:21:28

标签: javascript objective-c ios uiwebview

我已经创建了一个IOS应用程序。

该应用程序具有MainViewController,它将从webViewController呈现/关闭Modal视图 nib文件(包含NavBar和UIWebView)。我想在UIWebView加载的每个网页中注入我的javascript函数,这些函数将在网页中调用,这意味着所有函数必须在页面加载完成之前完成加载。

我尝试了很多方法但看起来就像当ModalView再次出现时(它在第一次出现时工作正常)。该页面不知道我注入的功能。

所以我的问题是:

  • 如果在ModalView存在时UIWebView加载请求,我应该在哪里注入我的javascript?在loadRequest之前? didStartLoad? didFinishLoad?
  • 解散ModalView时,我应该如何处理UIWebView?加载about:空白请求?

感谢阅读和任何帮助/建议。 :)

2 个答案:

答案 0 :(得分:1)

  

如果在ModalView存在时UIWebView加载请求,我应该在哪里注入我的javascript?在loadRequest之前? didStartLoad? didFinishLoad?

webViewDidFinishLoad:。在此之前,您无法致电stringByEvaluatingJavaScriptFromString:。遗憾的是,没有显示Web视图就没有好办法达到这一点,如果你的JavaScript改变太多,有时会导致视图“闪烁”。我有时会在Web视图上添加一个额外的视图,以便在webViewDidFinishLoad:完成之后将其隐藏起来。

  

当关闭ModalView时,我应该如何处理UIWebView?加载about:空白请求?

无。它应该在释放模态视图时释放。

答案 1 :(得分:0)

  

如果在ModalView存在时UIWebView加载请求,我应该在哪里注入我的javascript?在loadRequest之前? didStartLoad? didFinishLoad?

我猜你的情况,如果用户点击你的目标链接或html元素,那么mainViewController将会出现presentModalView方法,对吧? (如果不是请纠正我)
如上所述,您可以在UIWebviewDelegate中像这样调用javascript

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 
{
     NSString *url = [[inRequest URL] absoluteString];

     /* separate your href string such as href="doMyFunction?presentView" */
     NSArray *comp1 = [url componentsSeparatedByString:@"?"];
     NSString * checker = [comp1 objectAtIndex:1];
     if([checker isEqualToString:@"presentView"])
     {
         // do my code
     }
}
  

当关闭ModalView时,我应该如何处理UIWebView?加载about:空白请求?

您的MainView已经掩盖了您的UIWebview,因此它取决于您的目的,如

  • 更改一些信息
  • 隐藏一些组件
  • 什么都没有

希望它可以帮到你!