2012-04-17 94 views
0

我想製作一個iphone應用程序。在那個應用程序中,我使用Javascript。我想知道從Javascript調用一個客觀的C函數函數是可能的。如果是,那我們該怎麼做?如果不是,那麼有沒有其他的選擇?如何從JavaScript調用Objective-C函數?

感謝 Akansha

我有這樣的Java腳本代碼。所以每當我輸入「onPlayerStateChange」函數,我想打開一個文件,並在這個文件中寫入一些事件。但是我不能在javascript中打開和寫入文件,因爲我不知道文件的位置。使用objective-c我可以在documentsDirectory中打開和寫入數據,但我不確定JavaScript。所以我打算在「onPlayerStateChange」中調用一個函數,該函數在Objective-C .m文件中。並且只要輸入「onPlayerStateChange」函數,該函數就會在文件中寫入。

現在可以提出任何建議嗎?

<!DOCTYPE HTML> 
<html> 
<body> 
<div id="player"></div> 
<script> 
    //Load player api asynchronously. 
    var tag = document.createElement('script'); 
    tag.src = "http://www.youtube.com/player_api"; 
    var firstScriptTag = document.getElementsByTagName('script')[0]; 
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 
    var done = false; 
    var player; 
    function onYouTubePlayerAPIReady() { 
     player = new YT.Player('player', { 
      height: '390', 
      width: '640', 
      videoId: 'JW5meKfy3fY', 
      events: { 
      'onReady': onPlayerReady, 
      'onStateChange': onPlayerStateChange 
      } 
     }); 
    } 
    function onPlayerReady(evt) { 
     evt.target.playVideo(); 
    } 
    function onPlayerStateChange(evt) { 
     if (evt.data == YT.PlayerState.PLAYING && !done) { // NEED TO ADD FILE OPERATION HERE 
      setTimeout(stopVideo, 6000); 
      done = true; 
     } 
    } 
    function stopVideo() { 
     player.stopVideo(); 
    } 
</script> 
</body> 
</html> 

回答

1

是的,你可以創建一個HTML/JS背景信息UIWebView,並在

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

您可以搭乘請求,並調用OBJ-C方法。 或者你創建像Appcelerator一樣的解決方案:https://stackoverflow.com/a/2471774/644629

+0

我想答案是不完美的用戶想從javascript不是從一些委託方法 – 2012-04-17 08:27:01

+0

調用函數@AalokParikh也許你應該閱讀我的文章的編輯版本! – CarlJ 2012-04-17 08:29:58

+0

好吧這是好的 – 2012-04-17 08:31:50