2011-12-29 24 views
2

我有一個混合應用程式:我們可以使用另一個函數名稱作爲該方法的參數從JavaScript調用本地方法嗎?

本機代碼:

主要活動:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    webView=(WebView)findViewById(R.id.webkitWebView1); 
    WebSettings settings = webView.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDatabaseEnabled(true); 
    settings.setDomStorageEnabled(true); 

    //To display the alert 
    webView.setWebViewClient(new WebViewClient()); 
    webView.setWebChromeClient(new WebChromeClient()); 
    webView.setWebChromeClient(new WebChromeClient() { 
     public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, 
       long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { 
      quotaUpdater.updateQuota(estimatedSize * 1); 
     } 
    }); 


    openCamera=new OpenCamera(webView,AvivaInsureActivity.this); 
    webView.addJavascriptInterface(openCamera,"camera"); 

    //load html5 page 
    webView.loadUrl("file:///android_asset/html/home.html"); 

} 

類別:

public class OpenCamera { 
... 
public void setName(String name){ 
name=name; 
.... 
} 

的JavaScript + HTML:

<html> 
    <head> 
    <script type="text/javascript"> 
    function openMsg(msg){ 
    camera.setName("sneha"); 
    } 
    </script> 

</head> 
<body> 
<div class='content'></div> 
<div class='buttons'><input type='button' class='yesB' value='Yes' /> 
<input class='yesB' type='button' value='No' /></div> 
</div> 
<input type="button" onclick="openMsg('Do you wish')"/> 
</body> 
</html> 

有沒有一種方法,我可以傳遞一個函數的名字說addInt()作爲參數傳遞給

camera.setName("sneha"); 

回答

0

可以函數作爲參數傳遞,或者作爲其他對象的屬性功能名稱。

第一個例子:

function foo() { 
    console.log('Hello World'); 
} 

function bar(arg) { 
    arg(); 
} 

bar(foo); //Console output: 'Hello World' 

在第二個例子,你可以把多種方法爲Javascript對象,然後用該方法的名稱的字符串通過對象調用方法:

function Obj() { 
    this.methodOne = function() { 
     console.log('This is method one'); 
    } 

    this.methodTwo = function() { 
     console.log('This is method two'); 
    } 
} 

function methodCaller(objArg, methodName) { 
    objArg[methodName](); 
} 

var anObj = new obj(); 

methodCaller(anObj, 'methodOne'); //Outputs "This is method one" 
methodCaller(anObj, 'methodTwo'); //Outputs "This is method two" 
相關問題