我应该用哪种方法注入 javascript? (stringByEvaluatingJavaScriptFromString)
Posted
技术标签:
【中文标题】我应该用哪种方法注入 javascript? (stringByEvaluatingJavaScriptFromString)【英文标题】:Which method should i inject javascript? (stringByEvaluatingJavaScriptFromString) 【发布时间】:2012-02-29 17:21:28 【问题描述】:我已经创建了一个 ios 应用。
应用程序具有 MainViewController,它将显示/关闭来自 webViewController 的模态视图 nib 文件(包含 NavBar 和 UIWebView)。我想在 UIWebView 加载的每个网页中注入我的 javascript 函数,这些函数将在网页中调用,这意味着所有函数都必须在页面完成加载之前完成加载。
我尝试了很多方法,但似乎当 ModalView 再次出现时(目前它工作正常)。页面不知道我注入的功能。
所以我的问题是:
如果在 ModalView 存在时 UIWebView 加载请求,我应该在哪里注入我的 javascript?在加载请求之前?是否开始加载? didFinishLoad? 当关闭 ModalView 时,我应该如何处理 UIWebView?加载 about:blank 请求?感谢您的阅读和任何帮助/建议。 :)
【问题讨论】:
【参考方案1】:如果在 ModalView 存在时 UIWebView 加载请求,我应该在哪里注入我的 javascript?在加载请求之前?是否开始加载? didFinishLoad?
在webViewDidFinishLoad:
。在此之前,您不能致电 stringByEvaluatingJavaScriptFromString:
。不幸的是,如果不显示 Web 视图,没有好的方法可以达到这一点,如果您的 JavaScript 更改太多,有时会导致视图“闪烁”。我有时会在 web 视图上放置一个额外的视图来隐藏它,直到 webViewDidFinishLoad:
完成。
关闭 ModalView 时我应该如何处理 UIWebView?加载 about:blank 请求?
什么都没有。释放模态视图时应该释放它。
【讨论】:
谢谢 Rob :),我会试试的。我只是担心网页会在注入之前调用这些函数,这会使 js 崩溃。 您无法使用stringByEvaluatingJavaScriptFromString:
完全解决此问题。 onload 事件将在您运行任何内容之前触发。如果您必须在 onload 之前注入代码,那么您必须在向下的过程中修改 html 本身。你可以使用 NSURLProtocol 来做到这一点,但修改任意 HTML 总是很危险的。【参考方案2】:
如果在 ModalView 存在时 UIWebView 加载请求,我应该在哪里注入我的 javascript?在加载请求之前?是否开始加载? 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:blank 请求?
您的 MainView 已经覆盖了您的 UIWebview,因此这取决于您的目的,例如
更改一些信息 隐藏一些组件 什么都不做希望对你有帮助!
【讨论】:
以上是关于我应该用哪种方法注入 javascript? (stringByEvaluatingJavaScriptFromString)的主要内容,如果未能解决你的问题,请参考以下文章
c语言中,一次连续输入多组数据,并且最后连续输出多组结果,应该用哪种方法