我应该使用哪种方法注入javascript?(stringByEvaluatingJavaScriptFromString)
我已经创建了一个IOS应用程序 应用程序具有MainViewController,它将从webViewController显示/取消模式视图 nib文件(包含导航栏和UIWebView)。我想在UIWebView加载的每个网页中插入javascript函数,这些函数将在网页中调用,这意味着所有函数都必须在页面完成加载之前完成加载 我尝试了很多方法,但当ModalView再次出现时(第一次出现时工作正常)。页面不知道我的注入函数 所以我的问题是:我应该使用哪种方法注入javascript?(stringByEvaluatingJavaScriptFromString),javascript,objective-c,ios,uiwebview,Javascript,Objective C,Ios,Uiwebview,我已经创建了一个IOS应用程序 应用程序具有MainViewController,它将从webViewController显示/取消模式视图 nib文件(包含导航栏和UIWebView)。我想在UIWebView加载的每个网页中插入javascript函数,这些函数将在网页中调用,这意味着所有函数都必须在页面完成加载之前完成加载 我尝试了很多方法,但当ModalView再次出现时(第一次出现时工作正常)。页面不知道我的注入函数 所以我的问题是: 如果ModalView出现时UIWebView加
- 如果ModalView出现时UIWebView加载请求,我应该在哪里注入javascript?在请求之前?你有没有吃东西?完成了吗
- 当关闭ModalView时,我应该如何处理UIWebView?加载关于:空白请求李>
webViewDidFinishLoad:
中。在此之前,您不能调用stringByEvaluatingJavaScriptFromString:
。不幸的是,如果不显示web视图,就无法达到这一点,如果JavaScript更改过多,有时会导致视图“闪烁”。有时我会在web视图上放置一个额外的视图来隐藏它,直到webViewDidFinishLoad:
完成
当关闭ModalView时,我应该如何处理UIWebView?加载关于:空白请求
没什么。应在释放模态视图时释放它
如果ModalView出现时UIWebView加载请求,我应该在哪里注入javascript?在请求之前?你有没有吃东西?完成了吗
在webViewDidFinishLoad:
中。在此之前,您不能调用stringByEvaluatingJavaScriptFromString:
。不幸的是,如果不显示web视图,就无法达到这一点,如果JavaScript更改过多,有时会导致视图“闪烁”。有时我会在web视图上放置一个额外的视图来隐藏它,直到webViewDidFinishLoad:
完成
当关闭ModalView时,我应该如何处理UIWebView?加载关于:空白请求
没什么。应在释放模态视图时释放它
如果ModalView出现时UIWebView加载请求,我应该在哪里注入javascript?在请求之前?你有没有吃东西?完成了吗
我猜在您的情况下,如果用户单击一些目标链接或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?加载关于:空白请求
您的MainView已经覆盖了UIWebview,因此它取决于您的目的,如
- 改变一些信息
- 隐藏一些组件
- 什么都不要做
如上所述,您可以像这样在
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?加载关于:空白请求
您的MainView已经覆盖了UIWebview,因此它取决于您的目的,如
- 改变一些信息
- 隐藏一些组件
- 什么都不要做
希望它能帮助你 谢谢Rob:),我会试试。我只是担心网页会在注入之前调用这些函数,这会使js崩溃。使用
stringByEvaluatingJavaScriptFromString:
无法完全修复此问题。onload事件将在您运行任何内容之前触发。如果您必须在onload之前注入代码,那么您必须在下载的过程中修改HTML本身。你可以用NSURLProtocol做到这一点,但是修改任意HTML总是很危险的。谢谢Rob:),我会试试。我只是担心网页会在注入之前调用这些函数,这会使js崩溃。使用stringByEvaluatingJavaScriptFromString:
无法完全解决这个问题。onload事件将在您运行任何内容之前触发。如果您必须在onload之前注入代码,那么您必须在下载的过程中修改HTML本身。您可以使用NSURLProtocol实现这一点,但是修改任意HTML总是很危险的。