我正在制作一个使用两个UIWebViews的应用程序。在其中一个我剥离网页的JavaScript和加载它(使页面显示更快)。另一个在后台加载整个页面的javascript,并在完成后替换另一个UIWebView。带有javascript的页面会添加一些横幅和更大的内容。
我试图让UIWebView自动滚动到用户在另一个WebView上的相同位置(元素)。我一直试图通过javascript(使用document.elementFromPoint)来做到这一点,但我无法找到一种方法将元素传递给另一个UIWebView(不知道它是否可能)。我无法通过Id找到元素,或者因为它们没有Id属性。
有没有办法将元素作为变量从一个UIWebView传递到另一个UIWebView?还是有另一种方法可以做到这一点?
答案 0 :(得分:0)
您可以使用- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
传递参数。
javascript方法可以返回由上述方法返回的字符串。它可以以JSON的形式返回多个值的数据,您可以使用JSON解析器解析这些值。或者它可以简单地返回一个字符串。您可以进一步使用该字符串/ JSON数据。
要传递该值,请参阅以下代码:
NSString *jsPrintBodyOfTable=[[NSString alloc]initWithFormat:@”printBodyOfTable((\”%@\”))”, content.at_content];
[self.webView stringByEvaluatingJavaScriptFromString:jsPrintHeadOfTable];
的简单教程
答案 1 :(得分:0)
无法将其从一个UIWebView明确地传递到另一个UIWebView。
但是,如果您定义自己的协议并将数据作为URL传递,则可以将数据传递到本机环境,然后您可以在其他Web视图上提取并执行Javascript以注入数据。
可以在实现UIWebViewDelegate协议的类中使用webView:shouldStartLoadWithRequest:navigationType:
来捕获URL,并且可以在UIWebView实例上使用stringByEvaluatingJavaScriptFromString:
执行Javascript。
如果您查看源代码,这就是在PhoneGap / Cordova中完成的。
答案 2 :(得分:0)
您正在寻找的是一个DOM属性:scrollY
,因此您可以在第一个网络视图中检索它:
NSString* scrollPosition = [webView1 stringByEvaluatingJavaScriptFromString: @"scrollY"];
然后再进行第二次滚动:
[webView2 stringByEvaluatingJavaScriptFromString:
[NSString stringWithFormat: @"window.scrollTo(0, %d);", scrollPosition]];