Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在Android应用程序上传输基于Javascript的网页(同时使用WebView和Context+;doit)。。。不';我无论如何都不工作_Javascript_Android_Html_Webview - Fatal编程技术网

尝试在Android应用程序上传输基于Javascript的网页(同时使用WebView和Context+;doit)。。。不';我无论如何都不工作

尝试在Android应用程序上传输基于Javascript的网页(同时使用WebView和Context+;doit)。。。不';我无论如何都不工作,javascript,android,html,webview,Javascript,Android,Html,Webview,我正在开发一个android应用程序,我做得很好,当我需要使用一些JS功能时,几个月前已经在一个网页上成功开发了这些功能(所以这是一个包含JS功能的HTML页面),但是没有办法让它们在android上工作 我尝试了上下文,这样: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); doit( "MY JAVASCRIPT HERE"

我正在开发一个android应用程序,我做得很好,当我需要使用一些JS功能时,几个月前已经在一个网页上成功开发了这些功能(所以这是一个包含JS功能的HTML页面),但是没有办法让它们在android上工作

我尝试了上下文,这样:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    doit(
            "MY JAVASCRIPT HERE"
           +"AND HERE"
           +"AND HERE"
           +"AND SO ON";
         );
}

void doit(String code)
{
    // Create an execution environment.
    Context cx = Context.enter();

    // Turn compilation off.
    cx.setOptimizationLevel(-1);

    try 
    {
        // Initialize a variable scope with bindnings for  
        // standard objects (Object, Function, etc.)
        Scriptable scope = cx.initStandardObjects();

        // Set a global variable that holds the activity instance.
        ScriptableObject.putProperty(
            scope, "TheActivity", Context.javaToJS(this, scope));

        // Evaluate the script.
        cx.evaluateString(scope, code, "doit:", 1, null);            
    } 
    finally 
    {
        Context.exit();
    }
}
    super.onCreate(savedInstanceState);
    setContentView(R.layout.google_graph);
    WebView webview = (WebView) findViewById(R.id.webView12);
    String content = "MY HTML CODE HERE"
                    +"AND HERE"
                    +"AND SO ON";

    WebSettings webSettings = webview.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webview.requestFocusFromTouch();
    webview.loadDataWithBaseURL( "file:///android_asset/", content, "text/html", "utf-8", null );
    //webview.loadUrl("file:///android_asset/Code.html"); // Can be used in this way too.
    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.Cognome_input:
        Intent intent = new Intent(GoogleGraph.this, GoogleImageGraphActivity.class);
        startActivity(intent);
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}
通过WebView,可以这样:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    doit(
            "MY JAVASCRIPT HERE"
           +"AND HERE"
           +"AND HERE"
           +"AND SO ON";
         );
}

void doit(String code)
{
    // Create an execution environment.
    Context cx = Context.enter();

    // Turn compilation off.
    cx.setOptimizationLevel(-1);

    try 
    {
        // Initialize a variable scope with bindnings for  
        // standard objects (Object, Function, etc.)
        Scriptable scope = cx.initStandardObjects();

        // Set a global variable that holds the activity instance.
        ScriptableObject.putProperty(
            scope, "TheActivity", Context.javaToJS(this, scope));

        // Evaluate the script.
        cx.evaluateString(scope, code, "doit:", 1, null);            
    } 
    finally 
    {
        Context.exit();
    }
}
    super.onCreate(savedInstanceState);
    setContentView(R.layout.google_graph);
    WebView webview = (WebView) findViewById(R.id.webView12);
    String content = "MY HTML CODE HERE"
                    +"AND HERE"
                    +"AND SO ON";

    WebSettings webSettings = webview.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webview.requestFocusFromTouch();
    webview.loadDataWithBaseURL( "file:///android_asset/", content, "text/html", "utf-8", null );
    //webview.loadUrl("file:///android_asset/Code.html"); // Can be used in this way too.
    }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.Cognome_input:
        Intent intent = new Intent(GoogleGraph.this, GoogleImageGraphActivity.class);
        startActivity(intent);
        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}
以下是HTML代码:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>

<script type="text/javascript">

    var dHOST                       = "ws://10.0.0.1:8080";

    var dCONNESSIONE_CHIUSA         = 1;
    var dCONNESSIONE_INAPERTURA     = 2;
    var dCONNESSIONE_APERTA         = 3;
    var dCONNESSIONE_LOGININCORSO   = 4;
    var dCONNESSIONE_ATTIVA         = 5;

    var dAUTOMATICO = true;
    var dLOGINAUTO  = dAUTOMATICO;

    var connection = null;
    var connectionOpen = false;
    var ultimaStringa = null;
    var stato;

    // definisco prototipo per usare startsWith che è + chiara
    if (typeof String.prototype.startsWith != 'function') {
        String.prototype.startsWith = function (str){

            return this.slice(0, str.length) == str;
        };
    }

    aggiornaStato( dCONNESSIONE_CHIUSA );

    function aggiornaInfoStato( stringa )
    {
        document.getElementById("stato").innerHTML = stringa;
    }
    function aggiornaStato( nuovostato )
    {

        if ( ! document.getElementById("stato") ) {
            return;
        }

        if ( nuovostato ) {
            stato = nuovostato;
        }

        if ( stato == dCONNESSIONE_CHIUSA ) {
            aggiornaInfoStato( "non connesso" )
            document.getElementById("btnConnetti").value = " connetti ";
        }
        else if ( stato == dCONNESSIONE_INAPERTURA ) {
            aggiornaInfoStato( "<span style='color:navy'>connessione in corso ...</span>" );
            if ( document.getElementById("infopiano") ) {
                document.getElementById("infopiano").value = "";
            }
        }
        else if ( stato == dCONNESSIONE_APERTA ) {
            aggiornaInfoStato( "<span style='color:green'>CONNESSO ( login NON effettuato )</span>" );
            document.getElementById("btnConnetti").value = " disconnetti ";
        }
        else if ( stato == dCONNESSIONE_LOGININCORSO ) {
            aggiornaInfoStato( "<span style='color:navy'>login in corso ...</span>" );
        }
        else if ( stato == dCONNESSIONE_ATTIVA ) {
            aggiornaInfoStato( "<span style='color:green'>ATTIVA</span>" );
            if (document.getElementById("btnLogin")) document.getElementById("btnLogin").value = " riceProd ";
        }

        if ( stato == dCONNESSIONE_APERTA )
            if (document.getElementById("btnLogin")) document.getElementById("btnLogin").value = " login ";
        else
            if (document.getElementById("btnLogin")) document.getElementById("btnLogin").value = " [disabled] ";

    }
    function connetti()
    {

        //alert( document.getElementById("userid").value );

        if ( !connection ) {

            aggiornaStato( dCONNESSIONE_INAPERTURA );

            connection = new WebSocket( dHOST );

            connection.onopen = function () {
                console.log("connesso");
                aggiornaStato( dCONNESSIONE_APERTA );
                if ( dLOGINAUTO || dAUTOMATICO ) {
                    login();
                }
            };

            connection.onclose = function (event) {
                console.log("connessione chiusa");
                if ( stato == dCONNESSIONE_CHIUSA ) {
                    // mi arriva dopo ca. 10" (Chrome) o 15" (IE) che ho inviato connection.close()
                }
                else if ( stato <= dCONNESSIONE_INAPERTURA ) {
                    aggiornaInfoStato( "<span style='color:red'>connessione fallita</span>" );
                }
                else {
                    aggiornaInfoStato( "<span style='color:red'>connessione interrotta</span>" );
                }
                stato = dCONNESSIONE_CHIUSA;
                connection=null;
            }

            connection.onerror = function (error) {
                console.log('errore: ' + error);
                if ( stato == dCONNESSIONE_CHIUSA ) {
                    // IE: mi arriva dopo 10"/15" che ho inviato connection.close()
                }
                else if ( stato >= dCONNESSIONE_ATTIVA ) {
                    aggiornaInfoStato( "<span style='color:red'>connessione interrotta (err)</span>" );
                }
                else {
                    aggiornaInfoStato( "<span style='color:red'>connessione fallita (err)</span>" );
                }
                connection=null;
                stato = dCONNESSIONE_CHIUSA;
            };

            connection.onmessage = function (e) {
                var stringa = e.data;

                console.log('ricevuto: ' + stringa);

                // gestione dei msg ricevuti
                if ( stringa=='login: ok' ) {
                    aggiornaStato( dCONNESSIONE_ATTIVA );
                    if ( dAUTOMATICO ) {
                        aggiornaInfoStato( "<span style='color:navy'>richiesta in corso ...</span>" );
                        login();
                    }
                }

                else if ( ultimaStringa.startsWith('riceprod: ') ) {

                    var aArray = JSON.parse(stringa);

                    alert( aArray.length );

                    alert( aArray[ 0 ] );

                    alert( aArray[ 0 ][ 0 ] );


                }


                else if ( stringa.startsWith('infopiano: ') ) {
                    var aArray = JSON.parse( stringa.substr(11) );
                    document.getElementById("infopiano").value = aArray[ 0 ];
                    aggiornaStato( dCONNESSIONE_ATTIVA );
                    if ( dAUTOMATICO ) {
                        connetti();
                    }
                }

            };
        }
        else {

            aggiornaStato( dCONNESSIONE_CHIUSA );
            connection.close();
            connection=null;

        }

    }
    function send( stringa )
    {
        if ( stato >= dCONNESSIONE_APERTA ) {
            connection.send( stringa );
            ultimaStringa=stringa;
        }
    }
    function login()
    {

        if ( stato == dCONNESSIONE_APERTA ) {

            aggiornaStato( dCONNESSIONE_LOGININCORSO );

            var userid  = document.getElementById("userid").value;
            var userpwd = document.getElementById("pwd").value;

            send( "login: ['" + userid + "','" + userpwd + "','WebSocketApp']" );

        }
        else if ( stato == dCONNESSIONE_ATTIVA ) {

            aggiornaStato( dCONNESSIONE_ATTIVA );
        }

    }

</script>
</head>

<body>
<center>

<table>
    <tr>
        <td colspan='2'><hr></td>
    </tr>
    <tr>
        <td width='100'>stato</td><td width='300'><span id='stato'>non connesso</span></td>
    </tr>
    <tr>
        <td colspan='2'><hr></td>
    </tr>
    <tr>
        <td>user</td><td><input type='text' id='userid' value='demo_ws_userid'></td>
    </tr>
    <tr>
        <td>pwd</td><td><input type='text' id='pwd' value='demo_ws_pwd'></td>
    </tr>
    <tr>
        <td colspan='2'><hr></td>
    </tr>
    <!--
    <tr>
        <td>id piano</td><td><input type='text' id='idpiano' value=''></td>
    </tr>
    -->
    <!--
    <tr>
        <td>residuo piano</td><td><input type='text' id='infopiano' value=''></td>
    </tr>
    <tr>
        <td colspan='2'><hr></td>
    </tr>
    -->
    <tr>
        <td><input type='button' id='btnConnetti' value=' connetti ' onclick='connetti();'></td>
        <td><input type='button' id='btnLogin' value=' login ' onclick='riceProd();'></td>
    </tr>
</table>

</center>
</body>
</html>

在最近的WebView(更具体地说是Chromimum WebView)中,常规javascript已经失效。 您可以通过以下方式实现所需的效果:

1) 首先,确保启用了javascript。我还建议您在webview设置中浏览可用的方法,因为您可能会在其中找到更多常用和必需的内容:

webview.getSettings.setJavaScriptEnabled(true)
2) 从4.4开始,您可以通过evaluateJavascript()来执行此操作,它将异步调用javascript并为您提供回调:

String exampleScript = "(function() { return \"example\"; }) ();"

webView.evaluateJavascript(exampleScript, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        Log.d("LogName", s); // Prints 'this'
    }
});
String exampleScript=“(函数(){return\'example\”;})(;”
evaluateJavascript(示例脚本,new ValueCallback(){
@凌驾
公共void onReceiveValue(字符串s){
Log.d(“LogName”,s);//打印“this”
}
});

3) 在4.4之前,您可以使用所描述的JavaScriptInterface。请注意额外的@JavascriptInterface注释,这是intrface在post SDK17设备上正常工作所必需的。

请提交日志cat输出,您将得到哪个错误