相关疑难解决方法(0)

确定WebView是否仅使用JS是不可见的

我有一个带有webView的Android测试应用程序,如下所示:

<WebView
        android:alpha="0"
        android:id="@+id/myWebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

我的主要活动加载了一个我运行JS内容的页面.使用JS启用JS:

webSettings.setJavaScriptEnabled(true);
Run Code Online (Sandbox Code Playgroud)

我的应用程序上有一个按钮,可以将alpha值从0切换为1(显示/隐藏webView).

是否有任何"创造性"方式来检测JS方面的变化?

我试过的事情:

更新:

澄清,我正在寻找一个JS Only解决方案,实际的JS代码是在WebView环境中使用的SDK.

我无法控制Android应用程序,完全控制WebView内容.

javascript android alpha google-chrome android-webview

11
推荐指数
1
解决办法
624
查看次数

在 android 中使用 Javascript 桥接器

我只是想将我的 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)

javascript android

8
推荐指数
1
解决办法
9885
查看次数

在Android运行时中访问浏览器的DOM内容

假设我们有一个标准的登录页面,如下所示:

在此处输入图片说明

我们可以像这样使用using 或plain中的HTML元素:DOMjQueryJavaScript

在此处输入图片说明

换句话说,获取元素在网页中的像素位置的方法非常简单,方法是使用element.getBoundingClientRect()

var rect = element.getBoundingClientRect();
console.log(rect.top, rect.right, rect.bottom, rect.left);
Run Code Online (Sandbox Code Playgroud)

因此,我们可以从控制台或通过网络应用程序以编程方式进行操作。

现在,假设我们随时都有一个Android浏览器(Chrome / Mozilla / WebView)。我可以URL在浏览器中检索网页的。在这种情况下:

https://login.microsoftonline.com/

所以我的问题是,给定登录页面的URL,我如何类似地获得对上相同输入字段的访问权限Android browser

在此处输入图片说明

我需要能够HTML在Android浏览器中访问网页的元素,并计算其像素位置。作为输入,我具有任何Android浏览器中的网页URL。

我说的是在Android运行时中通过Android应用执行此操作,即以编程方式使用Java / JS代码。

如果有人需要DOM页面的结构为文本,则可以使用以下(Java)代码以编程方式获取它:

URL url;
HttpURLConnection urlConnection;
String DOMContent = null;

try {
    url = new URL("https://login.microsoftonline.com/");
    urlConnection = (HttpURLConnection) url.openConnection();
    int responseCode = urlConnection.getResponseCode();
    if(responseCode == HttpURLConnection.HTTP_OK){
        DOMContent = readStream(urlConnection.getInputStream());
    }

} catch (MalformedURLException e) {
    e.printStackTrace();
} catch …
Run Code Online (Sandbox Code Playgroud)

html javascript jquery android dom

8
推荐指数
1
解决办法
282
查看次数

在Webview中运行javascript代码

我有一个webview我在android中使用,我试图触发按钮点击javascript.我正在尝试使用下面的代码将类的颜色更改为红色.但我似乎无法让它发挥作用

final WebView wb=(WebView)findViewById(R.id.webView2);
wb.loadUrl("javascript:"
                + "var FunctionOne = function () {"
                + "  try{document.getElementsByClassName('test')[0].style.color='red';}catch(e){}"
                + "};");
Run Code Online (Sandbox Code Playgroud)

javascript android webview

7
推荐指数
1
解决办法
1万
查看次数

动态更改android webView中的HTML元素

我知道这个问题是很常见的,并且可以使用来解决这里 - JS或jQuery和这里 -如何在Android上运行它.那么这个方法工作正常,但是当我们打电话时:

`myWebView.loadUrl("javascript:document.body.innerHTML = document.body.innerHTML.replace('link1', 'link2')");`
Run Code Online (Sandbox Code Playgroud)

图像link1正在改变link2,图像正在加载,但页面重新启动,所以如果我在最后我将开始...我可以只是实时更改link1到link2,而不是重新加载页面真正的浏览器

我也尝试在我的html文件中设置id,如:

<img src="https://link1.jpg" id="dm5kode"/>
Run Code Online (Sandbox Code Playgroud)

并在Android上运行:

myWebView.loadUrl("javascript:document.getElementById('dm5kode').src = 'link2'");

在这里,我没有得到任何空白屏幕......

javascript jquery android android-webview

6
推荐指数
1
解决办法
9027
查看次数

传递并返回来自javascript和android的值,并用作手机间隙插件

我想为手机创建一个插件,它传递并返回javascript和android之间的值.

任何人都可以建议如何做到这一点?

javascript android parameter-passing phonegap-plugins

5
推荐指数
1
解决办法
9568
查看次数

webview加载包含.js作为<script src>的本地html文件

我将.html(包含.js web链接)文件放在assest中,现在我正在尝试加载url

mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setPluginsEnabled(true);
        mWebView.getSettings().setAllowFileAccess(true);

        mWebView.loadUrl("file:///android_asset/anim1.html");
Run Code Online (Sandbox Code Playgroud)

在这里,我无法播放.js文件,等待积极响应.

android

5
推荐指数
1
解决办法
2万
查看次数

Xamarin Android Javascript和C#之间的双向通信

我正在使用Xamarin Android开发一个应用程序,它有一个显示网页的WebView.我想实现从WebView到c#的Javascript之间的双向通信.我可以使用此链接从Javascript调用C#.但是我找不到将数据从C#发送回Javascript的方法.有没有办法在这种方法中来回发送数据.我认为在Javascript中编写回调会起作用,但是如何从C#代码中激活它.

现在,我的问题是如何从javascript接口类调用WebView.我有一个Javascript接口类,如https://developer.xamarin.com/recipes/android/controls/webview/call_csharp_from_javascript/ namespace ScannerAndroid {public class JSInterface:Java.Lang.Object {Context context; WebView webView;

    public JSInterface (Context context, WebView webView1)
    {
      this.context = context;
      this.webView = webView1;
    }

    [Export]
    [JavascriptInterface]
    public void ShowToast()
    {
      Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show ();
      this.webView.LoadUrl ("javascript:callback('Hello from Android Native');");

    }   
  }
}
Run Code Online (Sandbox Code Playgroud)

代码在LoadUrl行抛出异常.java.lang.Throwable:在线程'Thread-891'上调用了一个WebView方法.必须在同一个线程上调用所有WebView方法.(预期的Looper Looper(main,tid 1){42ce58a0}调用null,FYI主Looper是Looper(main,tid 1){42ce58a0})

现在我正在努力如何从这个Java脚本接口类引用WebView

xamarin.android xamarin

5
推荐指数
1
解决办法
2911
查看次数

API 19上的WebView.evaluateJavascript - Android 4.3及更早版本不支持?

我看到一个非常奇怪的问题.

在我的代码中,我有以下条件:

if (Build.VERSION.SDK_INT >= 19)
    myWebView.evaluateJavascript("..."), null);
else
    myWebView.loadUrl("...");
Run Code Online (Sandbox Code Playgroud)

根据文档,evaluateJavascript应该从4.4(API 19)及以上.

从大约几个星期开始,我一直在运行Kitkat的多个用户崩溃:

java.lang.IllegalStateException: This API not supported on Android 4.3 and earlier
at android.webkit.WebViewClassic.evaluateJavaScript(WebViewClassic.java:2674)
at android.webkit.WebView.evaluateJavascript(WebView.java:905)  
Run Code Online (Sandbox Code Playgroud)

所有看到此崩溃的用户都在运行Android 4.4.4或4.4.2,两者都应该使用此方法.

这些设备包括:Ascend G510,Ascend Y300,p715,PAD1042以及其他一些不起眼的型号.

我很困惑.我考虑过简单地将这个要求提升到API 21(棒棒糖),但这似乎并不合适.我的代码应该有效,除非我遗漏了什么?

谁知道这里发生了什么?

android android-webview android-4.4-kitkat

5
推荐指数
0
解决办法
1415
查看次数

在页面加载时将 javascript 函数注入到 WebView 中

我试图在页面加载之前将全局 JavaScript 函数注入到 Web 视图中。我有一个名为testJS我正在注入的函数。在我的 WebViewClient 中,我正在执行以下操作

private String getJS() {
    return "javascript:function testJS() { return { test: 'Hello World' };}";
}

 @Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
    view.loadUrl(getJS());
}
Run Code Online (Sandbox Code Playgroud)

当我检查页面时,window.testJS未定义。

如果我执行以下操作,window.testJS网络视图中具有正确的功能,但它加载得不够早,因此无法正常工作。

@Override
public void onPageFinished(WebView view, String url) {
    view.loadUrl(getJS());
}
Run Code Online (Sandbox Code Playgroud)

在 iOS 中,我可以通过注入脚本执行相同的操作atDocumentStart,并且它按照我期望的方式工作。

let userScript = WKUserScript(
        source: scriptContent!,
        injectionTime: WKUserScriptInjectionTime.atDocumentStart,
        forMainFrameOnly: false)
contentController.addUserScript(userScript) 
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在 android WebView 中实现此目的?它适用于PageFinished,但不适用于PageStarted。

javascript android webview

5
推荐指数
1
解决办法
2069
查看次数