gpt4 book ai didi

Android loadurl 无法执行javascript

转载 作者:太空狗 更新时间:2023-10-29 15:20:35 24 4
gpt4 key购买 nike

我已经使用 addJavascriptInterface() 方法向 WebView 添加了一个 Javascript 接口(interface)对象,我正在尝试使用 WebView.loadUrl() 对该对象调用一个方法.

该对象是一个名为 JSInterface 的简单类。它有一个名为 echo() 的方法,该方法不接受任何参数并返回 void。我传递给 loadUrl() 的 URL 是 "javascript:JSInterface.echo()"(JSInterface 也是我用于 addJavascriptInterface()< 的接口(interface)名称)。

当我运行附加的应用程序时,echo() 方法永远不会执行。 logcat 或其他任何地方都没有错误。我需要做什么才能从 Javascript 调用 echo()

这是所有来源的 Activity 。


当然是在我发布问题之后我才弄清楚出了什么问题。在附加的代码中,我从 UI 线程以外的线程调用 addJavascriptInterface()。将 addJavascriptInterface() 移动到 onCreate() 可以解决问题。


package test.pg;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebView;

public class TestActivity2
extends Activity
{
WebView webview;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("file:///android_asset/www/invoke.html");
TimerThread t = new TimerThread(webview);
t.start();
}

class TimerThread
extends Thread
{
long lastRun;
WebView appView;

public TimerThread(WebView appView)
{
lastRun = System.currentTimeMillis();
this.appView = appView;
}

public void run()
{
try
{
while (true)
{
if (System.currentTimeMillis() - lastRun < 5000)
{
Thread.sleep(5000);
}
else
{
appView.addJavascriptInterface(new JSInterface(), "JSInterface");
InvokerThread t = new InvokerThread(appView);
t.start();
lastRun = System.currentTimeMillis();
}
}
}
catch (Exception e)
{
Log.e("InvokerThread", "exception=" + e.toString(), e);
}
}
}

class InvokerThread
extends Thread
{
WebView appView;

public InvokerThread(WebView appView)
{
this.appView = appView;
}

public void run()
{
String function = "javascript:JSInterface.echo()";
appView.loadUrl(function);
}
}

class JSInterface
{
public void echo()
{
System.out.println("JSInterface.echo()");
Log.i("JSInterface", "JSInterface.echo()");
}
}
}

最佳答案

当然是在我发布问题之后我才弄清楚出了什么问题。在附加的代码中,我从 UI 线程以外的线程调用 addJavascriptInterface() 。将 addJavascriptInterface() 移至 onCreate() 可以解决问题。

关于Android loadurl 无法执行javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com