从android活动调用javascript函数

aks*_*728 4 javascript android cordova

我在main活动中使用以下代码,它给出的函数display()没有定义

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()");
    }
}
Run Code Online (Sandbox Code Playgroud)

在最后一行,它没有定义错误显示()

function display() {
    alert("abc");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码显示了我在html文件中使用的显示功能

任何类型的帮助将不胜感激

Zat*_*ter 6

让Cordova在页面加载时加载JavaScript是一个坏主意.这应该由您的本地JavaScript处理.尝试在HTML页面本身中调用这样的display()函数:

<script>
    function display()
    {


        alert("abc");


    }

    window.onload = function() {
        display();
    }
</script>
Run Code Online (Sandbox Code Playgroud)

如果您需要在以后的任何时间从Cordova内部调用JavaScript,可以这样做:

sendJavascript("display();");
Run Code Online (Sandbox Code Playgroud)

要从其他类访问此方法,您需要访问主要活动.简单但可能不安全的方法是在主Activity中创建一个静态变量来保存活动本身.例:

public class MyActivity extends DroidGap {
    public static MyActivity activity;

    public void onCreate(Bundle savedInstanceState) {
        activity = this;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,从您班级的任何地方,执行:

MyActivity.activity.sendJavascript('display();');
Run Code Online (Sandbox Code Playgroud)