在此代码中,Android应用程序打开一个带有WebView的网页,并从HTML中提取标签“body”和“/ body”之间的文本。
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
public class MainAc extends Activity {
/** Called when the activity is first created. */
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.web);
TextView text2 = (TextView) findViewById(R.id.text);
Button infoButton = (Button) findViewById(R.id.b1);
infoButton.setOnClickListener(new OnClickListener(){
public void onClick(View view){
// here is your button click logic, for example running another activity (page)
startActivity(new Intent(MainAc.this, JavaInterface.class));
}
});
class Javasc {
private TextView t2;
public Javasc (TextView i)
{
t2 = i;
}
@SuppressWarnings("unused")
public void processContent(String ii)
{
final String content = ii;
t2.post(new Runnable()
{
public void run()
{
t2.setText(content);
}
});
}
}
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Javasc(text2), "INTERFACE");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url)
{
view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);");
}
});
webView.loadUrl("http://www.nytimes.com/2014/08/03/sports/basketball/pacers-paul-george-has-surgery-after-badly-injuring-leg.html?ref=sports");
}
}
是否可以在android的TextView中使用JavaScript函数提取文本?
例如这个JavaScript函数(或者它可以是需要使用文本的任何其他JS函数)
function myFunction() {
var text = document.body.innerText;
var titles =text.match(/^\n(.+?)\n\n/mg);
for (var i = 0; i < titles.length; i++) {
document.write(titles[i] + "<br />" + "<br />");
}
}
感谢您的回答:)
答案 0 :(得分:1)
根据this article,Dalvik VM支持Java的脚本功能(javax.script
)。 javax.script
支持的主要语言之一,不出所料,是JavaScript。
因此理论上,您可以使用javax.script
内容来执行JavaScript代码并获取结果。我认为(也基于那篇文章),你必须包含相关的jar(javax.script
不在Android SDK中)。幸运的是,javax.script
主要是一组接口,由特定脚本语言的jar实现。
有关使用javax.script
运行脚本代码的一些资源:
答案 1 :(得分:0)
您可以使用Rhino来实现这一目标。具体参见 Context.jsToJava 。
https://vec.io/posts/embed-javascript-in-android-java-code-with-rhino
答案 2 :(得分:-1)
你想对一个文本做一个正则表达式并使用javascript来实现它,当你在java中有一个更快速的API而没有开销时,这是不必要的。
与您的示例相同的是:
http://developer.android.com/reference/java/util/regex/Pattern.html
Pattern p = Pattern.compile("/^\n(.+?)\n\n/mg");
Matcher m = p.matcher(myTextView.getText());
while (m.find()) {
String titles = m.group(1);
Log.V("TAG", titles);
}
核心框架或外部库中包含大量其他文本分析解决方案,这些解决方案已针对移动设备和服务器进行了验证。你只需要查阅它,而不是使用你喜欢的更糟糕的API。