将元素从一个 UIWebView 传递到另一个 UIWebView

passing an element from one UIWebView to another

本文关键字:UIWebView 另一个 一个 元素      更新时间:2023-09-26

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

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

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

不可能

简单地将其从一个UIWebView传递到另一个UIWebView。

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

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

如果你看一下源代码,这就是在PhoneGap/Cordova中所做的。

您可以使用- (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/的简单教程

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

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

然后进行第二次滚动:

[webView2 stringByEvaluatingJavaScriptFromString:
     [NSString stringWithFormat: @"window.scrollTo(0, %d);", scrollPosition]];