我试图将一些javascript
函数调用在一个html
页面中运行android webview
.很简单,什么代码尝试下面的事情-从Android应用程序,调用一个javascript
带有测试消息,它依次调用Java函数回,在Android应用程序,通过敬酒显示测试消息功能.
该javascript
功能如下:
function testEcho(message){
window.JSInterface.doEchoTest(message);
}
Run Code Online (Sandbox Code Playgroud)
从WebView,我试着javascript
通过以下方式调用,没有运气:
myWebView.loadUrl("javascript:testEcho(Hello World!)");
mWebView.loadUrl("javascript:(function () { " + "testEcho(Hello World!);" + "})()");
Run Code Online (Sandbox Code Playgroud)
我确实启用javascript
了WebView
myWebView.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript
myWebView.addJavascriptInterface(myJSInterface, "JSInterface");
Run Code Online (Sandbox Code Playgroud)
并且继承了Java
班级
public class JSInterface{
private WebView mAppView;
public JSInterface (WebView appView) {
this.mAppView = appView;
}
public void doEchoTest(String echo){
Toast toast = Toast.makeText(mAppView.getContext(), echo, Toast.LENGTH_SHORT);
toast.show();
}
}
Run Code Online (Sandbox Code Playgroud)
我花了很多时间在谷歌上搜索我可能做错了什么.我发现的所有例子都使用这种方法.有没有人在这里看错了? …
有可能改变View的可见性,但是如何以编程方式更改XML中定义的布局的可见性?如何获得布局对象?
<LinearLayout
android:id="@+id/contacts_type"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone">
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 我有使用ScriptEngineManager,ScriptEngine类的代码,用于使用Java执行JavaScript代码.但它在Java SE中运行良好,并且在Android中不起作用 - SDK显示缺少类的错误.是否可以在Android中执行JS代码?谢谢.
假设我通过webview加载第三方URL.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new HelloWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new MyWebChromeClient());
webview.loadUrl("http://ebay.com");
}
Run Code Online (Sandbox Code Playgroud)
我可以在这个WebView中注入一些东西来替换我自己的ebay徽标吗?
我想从Android的网页中提取一些内容.我知道有解析HTML的库,但我想也许我可以作弊.
这就是我在做什么..
这是一些代码......
public void getLatestVersion(){
Log.e("Testing", "getLatestVersion called...");
WebView webview = new WebView(context.getApplicationContext());
webview.loadUrl("https://example.com");
webview.addJavascriptInterface(new jsInterface(), "Droid");
webview.loadUrl("javascript: window.onload=function(){ Droid.showToast('testing!'); }");
}
class jsInterface{
@JavascriptInterface
public void showToast(String message){
Log.e("Testing", message);
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
}
Run Code Online (Sandbox Code Playgroud)
由于WebView在UI中不可见,因此很难分辨哪个部分正在破坏.我所知道的是调用了第一个调用的Log,但是JavascriptInterface中的Log和Toast从未显示过.
我正在努力做甚么可能吗?如果是这样,我做错了什么?如果没有,为什么不呢?
编辑
将视图保留在UI中进行测试,显然第二次调用loadUrl不起作用.无论我尝试注入什么Javascript,它都不起作用.
编辑2
忘记启用Javascript我感到愚蠢,但它仍然没有工作..我添加了以下行...
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webview.loadUrl("javascript: alert('farts0');");
webview.loadUrl("https://example.com");
setContentView(webview);
String js = "document.body.innerHTML = '<p>test<p>';";
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webview.evaluateJavascript(js, null);
}else{
webview.loadUrl("javascript: "+js);
}
Run Code Online (Sandbox Code Playgroud)
编辑3
感谢大家的建议,你一直很有帮助,但到目前为止它还没有工作,所以除非有人在下一个小时提供工作代码,否则Nainal将得到一半的赏金.如果是这样,我不确定我是否会被允许再给它一个赏金,因为问题仍然没有得到解决.
到目前为止,这是我的完整代码,考虑了此页面上的建议,并尝试了我不太了解的手册中的几个设置.
import android.graphics.Bitmap;
import android.os.Bundle; …
Run Code Online (Sandbox Code Playgroud) 我只是想将我的 java 应用程序与 webview 上的内容进行交流。
详细地说,可能只是在单击按钮时显示祝酒词?
在谷歌上搜索并做了一些研究后,最终得到了以下代码。
PS:-我正在使用 Android Studio,是否需要编译任何外部库才能完成任务?或者是其他东西 ?
以下是我的 WebviewActivity 代码:-
public class WebviewActivity extends AppCompatActivity {
private static final String TAG = "Main";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webview);
//WebView Object
WebView browser;
browser=(WebView)findViewById(R.id.webView);
//Enable Javascript
browser.getSettings().setJavaScriptEnabled(true);
//Inject WebAppInterface methods into Web page by having Interface 'Android'
browser.addJavascriptInterface(new WebAppInterface(this), "Android");
browser.loadUrl("http://www.somewebsite.com/app/form.html");
}
//Class to be injected in Web page
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */ …
Run Code Online (Sandbox Code Playgroud) 有什么方法可以访问 Android 的 WebView 中的 DOM 结构吗?我需要它来检查页面上是否存在某个 DOM 对象,然后触发一些事件。
谢谢!