Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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-如何在Android网络视图中使用Javascript?_Javascript_Android_Cordova_Android Webview_Phonegap - Fatal编程技术网

Android-如何在Android网络视图中使用Javascript?

Android-如何在Android网络视图中使用Javascript?,javascript,android,cordova,android-webview,phonegap,Javascript,Android,Cordova,Android Webview,Phonegap,我的混合Android应用程序有问题。我需要一个带有HTML的网络视图,在这个HTML中我有一个按钮 我有一个带有WebView的布局,HTML中有一个按钮,当用户单击此按钮时,我正试图启动另一个屏幕的第二个活动(也是带有WebView的布局) 我的问题是这个按钮没有启动第二个活动 我用的是科尔多瓦 这是我的布局(pruebas.xml): 这是我的第二个活动(JavascriptInterfaceActivity.java): 这是description.html,另一个html(descri

我的混合Android应用程序有问题。我需要一个带有HTML的网络视图,在这个HTML中我有一个按钮

我有一个带有WebView的布局,HTML中有一个按钮,当用户单击此按钮时,我正试图启动另一个屏幕的第二个活动(也是带有WebView的布局)

我的问题是这个按钮没有启动第二个活动

我用的是科尔多瓦

这是我的布局(
pruebas.xml
):

这是我的第二个活动(
JavascriptInterfaceActivity.java
):

这是
description.html
,另一个html(
description long.html
)类似:

<!DOCTYPE html>
<html>
<head>
    <script src='changeactivity.js'></script>

    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <link rel="stylesheet" type="text/css" href="css/index.css">
    <title>Main activity</title>
</head>
<body>
<button id='changeactivity'>Changue activity</button>
</body>
</html>
有什么建议吗?我查看这些帖子:

基于

注意:绑定到JavaScript的对象在另一个线程中运行,而不是在构建它的线程中运行

您正在非UI线程上启动活动。您应该在UI线程上运行它,如下所示:

@android.webkit.JavascriptInterface
    public void changeActivity(){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                 Intent i = new Intent(MainActivity.this, JavascriptInterfaceActivity.class);
                 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                 startActivity(i);
                 finish();
            }
        });

    }

或者,您也可以使用Handler。

是否已添加此行myWebView.getSettings().setJavaScriptEnabled(true);选中此选项可能会对您有所帮助是的,我的活动中有这一行:wv.getSettings().setJavaScriptEnabled(true);我没有使用3d效果或类似的,我只有一个简单的HTML。谢谢。我输入了您的代码,但问题仍然存在。我还调试了该应用程序,但在changeActivity方法中似乎从未输入,可能在Javascript和活动之间的“连接”中失败。您试试
,然后将函数displaymessage(){JSInterface.changeActivity();}直接放在主体中如何?只是为了确保Android代码和Javascript之间的通信正常运行谢谢!最后,我修复了代码中的一个错误,并最终使用了changeActivity()代码。
public class JavascriptInterfaceActivity extends Activity {

    WebView wv;

    JavaScriptInterface JSInterface;

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

        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());

        setContentView(R.layout.pruebas);
        wv = (WebView)findViewById(R.id.webview);

        wv.getSettings().setJavaScriptEnabled(true);
        wv.getSettings().setDomStorageEnabled(true);

        JSInterface = new JavaScriptInterface(this);
        wv.addJavascriptInterface(JSInterface, "JSInterface");

        wv.loadUrl("file:///android_asset/www/description-long.html");

    }


    public class JavaScriptInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        JavaScriptInterface(Context c) {
            mContext = c;
        }

        @android.webkit.JavascriptInterface
        public void changeActivity(){
            Intent i = new Intent(JavascriptInterfaceActivity.this, MainActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(i);
            finish();
        }
    }
}
<!DOCTYPE html>
<html>
<head>
    <script src='changeactivity.js'></script>

    <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
    <link rel="stylesheet" type="text/css" href="css/index.css">
    <title>Main activity</title>
</head>
<body>
<button id='changeactivity'>Changue activity</button>
</body>
</html>
 function displaymessage(){
     JSInterface.changeActivity();
 }

 document.addEventListener('DOMContentReady', function () {
         document.getElementById('changeactivity').addEventListener('click', displaymessage);
 });
@android.webkit.JavascriptInterface
    public void changeActivity(){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                 Intent i = new Intent(MainActivity.this, JavascriptInterfaceActivity.class);
                 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                 startActivity(i);
                 finish();
            }
        });

    }