-1

我正在制作一个使用两个 UIWebViews 的应用程序。在其中一个上,我将网页剥离为 javascript 并加载它(以使页面显示得更快)。另一个在后台使用 javascript 加载整个页面,并在完成后替换另一个 UIWebView。带有 javascript 的页面将添加一些横幅和使其更大的东西。

我试图让 UIWebView 自动滚动到用户在另一个 WebView 上的相同位置(元素)。我一直在尝试通过javascript(使用document.elementFromPoint)来做到这一点,但我找不到将元素传递给另一个UIWebView的方法(不知道它是否可能)。我也无法通过 Id 定位元素,因为它们没有 Id 属性。

有没有办法将元素作为变量从一个 UIWebView 传递到另一个?还是有其他方法可以做到这一点?

4

3 回答 3

0

您可以- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script用于传递参数。

javascript方法可以返回字符串,然后由上述方法返回。它可以以 JSON 的形式返回多个值的数据,您可以使用 JSON 解析器对其进行解析。或者它可以简单地返回一个字符串。您可以进一步使用该字符串/JSON 数据。

要传递值,请参见以下代码:

NSString *jsPrintBodyOfTable=[[NSString alloc]initWithFormat:@”printBodyOfTable((\”%@\”))”, content.at_content];

 [self.webView stringByEvaluatingJavaScriptFromString:jsPrintHeadOfTable];

http://howtomakeitinamsterdam.wordpress.com/2011/12/17/uiwebview-calling-javascript-from-ios-with-passing-parameters-tutorial/的简单教程

于 2012-06-15T07:14:46.380 回答
0

有一个 DOM 属性是您正在寻找的:scrollY,因此您可以在您的第一个 Web 视图中检索它:

NSString* scrollPosition = [webView1 stringByEvaluatingJavaScriptFromString: @"scrollY"];

然后进行第二次滚动:

[webView2 stringByEvaluatingJavaScriptFromString:
     [NSString stringWithFormat: @"window.scrollTo(0, %d);", scrollPosition]];
于 2012-06-15T07:21:23.633 回答
0

不可能将它从一个 UIWebView 清楚地传递到另一个。

但是,如果您定义自己的协议并将数据作为 URL 传递,则可以将数据传递到本机环境,然后您可以在另一个 Web 视图上提取并执行 Javascript 以注入数据。

捕获 URL 可以webView:shouldStartLoadWithRequest:navigationType:在实现 UIWebViewDelegate 协议的类中完成,并且可以stringByEvaluatingJavaScriptFromString:在 UIWebView 实例上执行 Javascript。

如果您查看源代码,这就是在 PhoneGap/Cordova 中所做的。

于 2012-06-15T07:18:24.473 回答