2012-06-15 49 views
-1

我正在製作一個使用兩個UIWebView的應用程序。在其中的一個我剝離JavaScript的網頁並加載它(使網頁顯示更快)。另一個在後臺使用javascript加載整個頁面,並在完成時替換其他UIWebView。帶有JavaScript的頁面會增加一些橫幅和東西使其更大。從一個UIWebView傳遞一個元素到另一個

我試圖讓UIWebView自動滾動到用戶在另一個WebView上的地方(元素)。我一直試圖通過javascript(使用document.elementFromPoint)來做到這一點,但我無法找到一種方法來傳遞一個元素到另一個UIWebView(不知道它是否可能)。我無法通過Id找到元素,因爲他們沒有Id屬性。

有沒有辦法將元素作爲變量從一個UIWebView傳遞給另一個?還是有另一種方法來做到這一點?

+0

你有什麼想法,爲什麼頁面加載緩慢的JavaScript?你做什麼樣的DOM修改?你什麼時候做,他們準備好了嗎?如果您希望渲染速度快,則可以將大小(寬度和高度屬性)提供給儘可能多的元素,以使佈局引擎開心。 –

+0

如果您需要什麼需要時間的提示,我建議您使用chrome加載頁面,並使用分析器,時間線和審計工具。 –

回答

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/

+0

我的問題是找到與第一個UIWebView中找到的相同的元素。說我尋找的元素看起來像這樣:

bla bla bla

。是否有可能將整個元素作爲字符串傳出,然後再使用該字符串定位它? – user1033619

+0

是的我認爲你可以返回「

bla bla bla

」。然後你可以將這個字符串傳遞給你的javascript方法,它可以在webview中找到它。你試過了嗎? – san

+0

那就是我試圖找出如何做。我知道如何找到元素,我想我可以在搜索時找到它,但我不知道如何以字符串形式返回它。 – user1033619

0

這是不可能清楚地從一個UIWebView的另一個傳遞。但是,如果您定義自己的協議並將數據作爲URL傳遞,則可以將數據傳遞到本機環境,然後可以在其他Web視圖上提取並執行Javascript以注入數據。

捕獲URL可以在實現UIWebViewDelegate協議的類中使用webView:shouldStartLoadWithRequest:navigationType:完成,並且可以在UIWebView實例上使用stringByEvaluatingJavaScriptFromString:執行Javascript。

這就是PhoneGap/Cordova所做的,如果你看看源代碼。

0

有這就是你正在尋找一個DOM屬性:scrollY,這樣你就可以在你的第一個Web視圖檢索:

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

,然後進行第二滾動到它:

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

這種方法的問題是,這兩個頁面是不同的高度。 – user1033619

相關問題