2012-09-20 77 views
4

javascript函數我使用的主要活動如下代碼,它給人的功能顯示()沒有定義調用從Android活動

public class cordovaExample extends DroidGap { 
    Context mcontext; 
    private novel n; 
    private Server s; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     new Thread(new Server(this)).start(); 
     try { 
      Thread.sleep(500); 
     } catch (InterruptedException e) { } 
     new Thread(new Client()).start(); 

     super.init(); 

     n = new novel(this, appView); 
     s = new Server(this,appView); 

     appView.getSettings().setJavaScriptEnabled(true); 
     appView.addJavascriptInterface(n, "novel"); 
     appView.addJavascriptInterface(s, "Server"); 

     super.loadUrl("file:///android_asset/www/index.html"); 
     super.loadUrl("javascript:display()"); 
    } 
} 

在它給錯誤顯示的最後一行()是未定義

function display() { 
    alert("abc"); 
} 

上面的代碼顯示在顯示功能,是我使用的HTML文件

任何類型的幫助將不勝感激

回答

6

讓Cordova在頁面加載時加載JavaScript是一個壞主意。這應該由您的本地JavaScript處理。試着打電話給你的顯示器()函數,這樣在HTML頁面本身:

<script> 
    function display() 
    { 


     alert("abc"); 


    } 

    window.onload = function() { 
     display(); 
    } 
</script> 

如果您需要在以後的任何一點從內部科爾多瓦調用JavaScript,有可能這樣做是這樣的:

sendJavascript("display();"); 

要從其他類訪問此方法,您需要訪問您的主要活動。簡單但可能不安全的方法是在主Activity中創建一個靜態變量,它將保存活動本身。例如:

public class MyActivity extends DroidGap { 
    public static MyActivity activity; 

    public void onCreate(Bundle savedInstanceState) { 
     activity = this; 
    } 
} 

然後,從你的類的任何地方,做:

MyActivity.activity.sendJavascript('display();'); 
+0

感謝名單先生回答,如果我想調用其他方法的JavaScript方法,它是不活動的,然後呢? ? – akshay1728

+0

看到更新的答案...順便說一句,插件總是訪問'sendJavascript()'功能 –

+0

好吧,我會嘗試非常感謝你+ 1加入 – akshay1728

1

從科爾多瓦2.6,你可以在你的CordovaActivity(DroidGap)覆蓋的onMessage,你必須捕捉消息 「onPageFinished」那麼你可以調用的文件中聲明的任何功能:

@Override 
public Object onMessage(String id, Object data) { 
    if("onPageFinished".equals(id)) { 
     sendJavascript("display('abc');"); 
    } 
    return super.onMessage(id, data); 
} 

而在HTML:

<script> 
    function display(arg) { 
     alert(arg); 
    } 
</script> 

另一種選擇是調用它的CordovaActivity的的onResume()函數:

@Override 
public void onResume() { 
    super.onResume(); 
    sendJavascript("display('abc');"); 
}