4

我在主要活动中使用以下代码,它给出的函数 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()");
    }
}

在最后一行给出错误 display() 未定义

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

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

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

4

2 回答 2

6

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

<script>
    function display()
    {


        alert("abc");


    }

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

如果您以后需要从 Cordova 中调用 JavaScript,可以通过以下方式进行:

sendJavascript("display();");

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

public class MyActivity extends DroidGap {
    public static MyActivity activity;

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

然后,在课堂上的任何地方,执行以下操作:

MyActivity.activity.sendJavascript('display();');
于 2012-09-20T13:54:05.697 回答
1

从 Cordova 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');");
}
于 2014-05-25T04:53:50.087 回答