2013-12-08 72 views
0

我有一個項目,我嘗試從Objective-C類調用一些JavaScript。如果一切都在一個類中(我可以調用腳本),它就可以工作。我不能從不同類的函數調用javascript

但是,當我在混合中引入另一個類時,我似乎無法調用第一個類的WebView的JavaScript。我以爲我沒有正確地調用這個類,但是我讓我的invokeJS方法提出了一個Objective-C AlertView,它工作。所以我知道它正在調用該方法,但如果我從第二個類中調用該方法,JavaScript似乎不起作用。

[t invokeJS]; 

而且我在其他類

-(void)invokeJS 
{ 
[self.webView stringByEvaluatingJavaScriptFromString:@"dan()"]; 
    } 

不允許我調用另一個類的觀點的行動?

我應該注意這是一個phonegap應用程序,所以這是相當尷尬的設置的原因。

我有一個模式控制器,當我解僱控制器我想調用JavaScript。

我想直接從我的modalViewController類訪問web視圖,但似乎並沒有工作或者

[t.webView stringByEvaluatingJavaScriptFromString:@"dan()"]; 

任何幫助是極大的讚賞,謝謝。

STARImageController *modalView = [[STARImageController alloc] initWithNibName:@"STARImageController" bundle:nil]; 
    modalView.myImage = fileContents; 
    [self.viewController presentModalViewController:modalView animated:YES]; 

上面的代碼是從我的吐司類(t),呈現模態視圖控制器。可能值得注意的是,我的吐司班不是一個視圖,而是一個CordovaPlugin的孩子班,但我不知道它應該重要...

+0

'self.webView'指的是您調用該方法的任何類的'webView'屬性...當您啓動模態控制器時,是否將其'self.webview'屬性設置爲原始視圖控制器上的webview?你如何進入模態視圖控制器,你可以包含該代碼? – nhgrif

+0

加在最下面謝謝 – Dnaso

+0

讓你說的答案吧=) – Dnaso

回答

1

如果你想從模態視圖控制器做[self.webView stringByEvaluatingJavaScriptFromString:@"dan()"];,嘗試這樣的:

STARImageController *modalView = [[STARImageController alloc] 
    initWithNibName:@"STARImageController" bundle:nil]; 
modalView.webView = self.webView; // <-- this line 
modalView.myImage = fileContents; 
[self.viewController presentModalViewController:modalView animated:YES]; 

這裏的假設是webView要運行的JavaScript上被稱爲self.webView上的ViewController它的上,和你呈現modalView有UIWebView屬性調用webView。現在

modalView.webView是原來的網頁視圖的引用,因此調用從modalView[self.webView stringByEvaluatingJavaScriptFromString:@"dan()"];實際上是要在原來的視圖中調用它的webView

+0

啊你救了我。 (ObjC的新功能)我可以將整個視圖作爲屬性傳遞給控制器​​以及數據?漂亮瘋狂的概念。感謝您的幫助,您是一位救生員。 – Dnaso

+0

你並沒有真正傳遞整個視圖。您正在傳遞對視圖的引用。只有一個webview。 'self.webView'是一個指向webview的指針。你所做的只是將指針複製到另一個視圖控制器中。你可以做任何你想要的物體。 – nhgrif

+0

如果你願意,你可以傳遞一個引用到整個視圖控制器...(當你發送'self'作爲參數時,你正在做什麼,通常作爲委託,例如使用'UIAlertView') – nhgrif