Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >我们如何导航到活动从网页按钮单击事件?

我们如何导航到活动从网页按钮单击事件?
EN

Stack Overflow用户
提问于 2019-04-10 01:58:50
回答 3查看 362关注 0票数 2

我在webview中有两个按钮。我想手动单击事件给他们。下面是我的代码;

WebPage码

代码语言:javascript
代码运行次数:0
复制
<form method="post" name="refer_now">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer-now">refer now</button> -->
      <input type="button" class="refer-now-btn" value="refer now" name="refernow" id="refernow" onClick="showAndroidToast('refer');" />
    </div>
  </form>

  <form method="post" name="refer_now_footer">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer_now_footer">refer now</button> -->
       <input type="button" class="refer-now-btn" value="refer now" name="refer-footer" id="refer-footer" onClick="showAndroidToast('bottom_refer');" />
    </div>
</form>

下面是我的java代码;

代码语言:javascript
代码运行次数:0
复制
   mWebview.loadUrl(link);

            mWebview.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                    //Required functionality here
                    return super.onJsAlert(view, url, message, result);
                }});
            mWebview.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
            mWebview.getSettings().setJavaScriptEnabled(true);
            mWebview.getSettings().setLoadsImagesAutomatically(true);
            mWebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

    public class WebAppInterface {
    Context mContext;

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

    @JavascriptInterface
    public void showevent(String toast) {
        if(toast.equalsIgnoreCase("refer")){
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }else if(toast.equalsIgnoreCase("bottom_refer")){
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }
}

当我运行这段代码时,这会给出以下错误:

“未定义的ReferenceError: AndroidInterface未定义”,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-10 22:30:24

要执行android中的webview按钮单击:

HTML & Java脚本

代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html lang="en">
<body>
<input type="button"  value="Say hello" onClick="showAndroidToast('OK')" />
<input type="button"  value="hello mr.vicky" onClick="showAndroidToast('MR.VICKY')" />
<br/><br/>

<script type="text/javascript">
        <!-- Sending value to Android -->
        function showAndroidToast(toast) {
            AndroidInterface.showToast(toast);
        }
      </script>
</body>
</html>

JAVA代码

代码语言:javascript
代码运行次数:0
复制
package com.ellvar.Activity.Common.Activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.Toast;

import com.ellvar.CustomView.CustomDialog;
import com.ellvar.CustomView.CustomProgressDialog;
import com.ellvar.R;
import com.ellvar.Utils.Utility;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class TermsConditionActivitydemo extends AppCompatActivity {

    @BindView(R.id.wv_termscondition)
    WebView wvTermscondition;
    @BindView(R.id.iv_back)
    ImageView ivBack;
    CustomProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_terms_condition);
        ButterKnife.bind(this);
        if (!Utility.getInstance().isNetworkAvailable(this)) {
            CustomDialog.getInstance().showalert(this, getString(R.string.please_check_internet_connection));
        }else{
            loaddata();
        }
    }
    private void loaddata() {
        wvTermscondition.loadUrl("file:///android_asset/index.html");
        wvTermscondition.setWebChromeClient(new WebChromeClient() {
                                  @Override
                                  public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                                      //Required functionality here
                                      return super.onJsAlert(view, url, message, result);
                                  }});
        wvTermscondition.addJavascriptInterface(new WebAppInterface(this), "AndroidInterface");
        wvTermscondition.getSettings().setJavaScriptEnabled(true);
        wvTermscondition.getSettings().setLoadsImagesAutomatically(true);
        wvTermscondition.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
    }


    @OnClick(R.id.iv_back)
    public void onViewClicked() {
        finish();
    }


    public class WebAppInterface {
        Context mContext;

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

        @JavascriptInterface
        public void showToast(String toast) {
            if(toast.equalsIgnoreCase("OK")){
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            }else if(toast.equalsIgnoreCase("MR.VICKY")){
                Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
            }
        }
    }


}

输出

票数 1
EN

Stack Overflow用户

发布于 2019-04-10 02:11:36

我不确定是否可以使用不同的addJavaScriptInterface多次调用names方法。尝试将performClick1方法移动到相同的JavaScriptInterface中,如下所示:

代码语言:javascript
代码运行次数:0
复制
    view.addJavascriptInterface(new Object() {
        @JavascriptInterface
        public void performClick() {
            Intent i = new Intent(FollowPageActivity.this, MyLoyaltyActivity.class);
            startActivity(i);
        }

        @JavascriptInterface
        public void performClick1() {
            Intent i = new Intent(FollowPageActivity.this, MyLoyaltyActivity.class);
            startActivity(i);
        }
    }, "refer_now");// identify which button you click
票数 0
EN

Stack Overflow用户

发布于 2019-04-10 02:12:43

名为refer_now的表单将分配给全局对象window的相同属性。

这意味着refer_now in onclick="refer_now.performClick();"是form元素。

关键是确保form javascriptinterface javascriptinterface的名称是不同的。

下面是一个解决方案:保留java代码并使用以下内容更改html:

代码语言:javascript
代码运行次数:0
复制
  <form method="post" name="refer_now_form">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer-now">refer now</button> -->
      <input type="submit" class="refer-now-btn" value="refer now" name="refernow" id="refernow" onclick="refer_now.performClick();" />
    </div>
  </form>

 <form method="post" name="refer_now_footer_form">
    <div class="refer-now-button">
      <!-- <button type="submit" class="refer-now-btn" id="refer_now_footer">refer now</button> -->
       <input type="submit" class="refer-now-btn" value="refer now" name="refer-footer" id="refer-footer" onclick="refer_now_footer.performClick1();" />
    </div>
</form>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55609764

复制
相关文章
重新复习Android View的绘制流程
PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个。同时,PhoneWindow也是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。
老马的编程之旅
2022/06/22
4200
重新复习Android View的绘制流程
怎么用Python绘制这样的图?
最近看到一张图,感觉很酷炫,搜索得知是叫做弦图。看到很多用R语言绘制的案例,以及有Excel大佬用VBA也绘制了一个,简直不要太强。
可以叫我才哥
2021/09/03
1.2K0
怎么用Python绘制这样的图?
【Android FFMPEG 开发】FFMPEG ANativeWindow 原生绘制 ( 设置 ANativeWindow 缓冲区属性 | 获取绘制缓冲区 | 填充数据到缓冲区 | 启动绘制 )
① FFMPEG 初始化 : 参考博客 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
韩曙亮
2023/03/27
1K0
【MATLAB】图像导出 ( 导出绘制的图像 | 图像设置 )
选择 matlab 生成的图形界面 " Figure 1 " 的菜单栏 , " 编辑选项 " , 点击 " 复制图形 " , 可以将图像拷贝到 Word 文档中 ;
韩曙亮
2023/03/29
9.9K0
【MATLAB】图像导出 ( 导出绘制的图像 | 图像设置 )
cas 配置https改为ip而不是使用域名
cas注销时地址是https,提示Error is [java.security.cert.CertificateException: No subject alternative names present]
lovelife110
2021/01/14
1.5K0
Dygraph 模拟柱状图的绘制
一开始,想着直接手动 canvas 绘图?但是跟 Dygraph 上的默认行为,比如 hover 要做适配,很是麻烦。那么 Dygraph 中就没有实现的方法了?
Jimmy_is_jimmy
2023/07/27
1000
Dygraph 模拟柱状图的绘制
音视频知识图谱 2022.11
前些时间,我在知识星球上创建了一个音视频技术社群:关键帧的音视频开发圈,在这里群友们会一起做一些打卡任务。比如:周期性地整理音视频相关的面试题,汇集一份音视频面试题集锦,你可以看看这个合集:音视频面试题集锦。再比如:循序渐进地归纳总结音视频技术知识,绘制一幅音视频知识图谱,你可以看看这个合集:音视频知识图谱。
关键帧
2023/02/14
9530
音视频知识图谱 2022.11
用matlab绘制函数图像例题_matlab绘制方程组图像
比如f(x,y)=-((x^2+y-1).^2+(x+y^2-7)^2)/200+10
全栈程序员站长
2022/10/04
8850
用matlab绘制函数图像例题_matlab绘制方程组图像
小白建站我为什么更推荐使用WordPress而不是typecho?
很多人在选择博客站时总是纠结使用WordPress还是typecho,亦或是像emlog,hexo,zblog等等,大多数大佬都是推荐typecho,一致意见是wp博客臃肿,那么,wp占地大吗?对的。但我还是推荐使用wp建站,下面说说我的看法。
深白鸭
2023/03/12
1.4K0
小白建站我为什么更推荐使用WordPress而不是typecho?
更聪明地学习,而不是苦读——《如何高效学习》
所以,需要持续大量学习的童鞋,比方说我等程序员们,除了要从知识的海洋中精挑细选出我们想要的内容,挑完了还得高效学习,不然成长的速度可能远远赶不上脱发的速度,沦落到「他变秃了,也没变强」的尴尬境地。
mzlogin
2020/05/21
6640
Unity通用渲染管线(URP)系列(一)——自定义渲染管线(Taking Control of Rendering)
这篇是自定义可编程管线的教程的第一部分,它创建一个基础的渲染管线资源,为后面的教程提供基础。
放牛的星星
2020/12/11
17.6K1
Unity通用渲染管线(URP)系列(一)——自定义渲染管线(Taking Control of Rendering)
WebRender:让网页渲染如丝顺滑
Firefox Quantum 发布在即。它带来了许多性能改进,包括从 Servo 引入的的极速 CSS 引擎。
疯狂的技术宅
2019/03/27
3K0
WebRender:让网页渲染如丝顺滑
掌握这个关键技术,让你的APP开发事半功倍!——Flutter与其他方案的区别
所以,最成功的跨平台开发方案其实是依托于浏览器控件的Web。浏览器保证了99%的概率下Web的需求都是可以实现的,不需要业务将就“技术”。不过,Web最大的问题在于它的性能和体验与原生开发存在肉眼可感知的差异,因此并不适用于对体验要求较高的场景。
JavaEdge
2023/07/09
5460
掌握这个关键技术,让你的APP开发事半功倍!——Flutter与其他方案的区别
【python图像处理】python绘制
3D图形在数据分析、数据建模、图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3D图形的绘制,包括3D散点、3D表面、3D轮廓、3D直线(曲线)以及3D文字等的绘制。
py3study
2020/01/10
1.5K0
【python图像处理】python绘制
matlab习题 —— 图像绘制练习
一、题目 (1) 读取附件1 sd.xlsx,以相邻两列数据绘制散点图并标注;以第 1,2,4 列数据绘制空间散点图 (2) 根据下面图形写出作图语句 ① y=sinx , y=cosx 在同一幅图; ② y=sinx , y=cosx 在同一幅图不同窗口 (3) 数组 [2,5,10,12,13,7,2,10,4,6,8,8,4,7,8] 作竖直、水平、立体柱状图、饼状图 (4) 绘制空间曲线 x=e^{0.3t}sint , y=e^{0.3t}cost , z=e^{0.3
繁依Fanyi
2023/05/07
7370
matlab习题 —— 图像绘制练习
我更喜欢这样的工程师
提及影响力时,工程师通常迫切希望自己成为一名管理者,以便获得更多的信息和决策权。这是一个不好的信号,但却非常普遍。
我就是马云飞
2018/10/10
3800
[Linux] 协程是不是我想的这样
最早知道的概念是进程 , 每个进程里面的执行单元是线程 , 一个进程肯定有一个主线程 , 也可以开出一些子线程 ,这俩都是操作系统控制的
唯一Chat
2020/04/08
8340
[Linux] 协程是不是我想的这样
用python绘制数学图像
在很多数学问题中人工计算其实非常的麻烦,我们可以多利用计算机的强大算力来给求解数学问题.
算法与编程之美
2023/08/22
1640
用python绘制数学图像
Android模拟绘制极坐标方程
零、前言 本着点动成线的世界真理,思考了一下,可以加入点的绘制来玩玩 有点就可以模拟坐标系,极坐标当然也阔以。 一个缺点就是重复绘制(因为绘制时点压点,然后看过度绘制一条红) 但是看极坐标方程是什么样子的,玩玩还是挺好的 绘图部分基于我的LogicCanvas绘图库:基础使用在此, 喜欢的话可以到项目的github上看看,顺便给个star 引入 allprojects { repositories { ... maven { url 'https://
张风捷特烈
2018/09/29
8480
Android模拟绘制极坐标方程
【JS】332- 为什么我更喜欢对象而不是 switch 语句
最近(或者不是最近,这完全取决于您什么时候阅读这边文章),我正在跟我的团队伙伴讨论如何去处理这种需要根据不同的值去处理不同的情况的方法,通常对于这种情况下,人们喜欢使用 switch 语句或者使用很多 if 搭配 else if 条件。在本文中我将重点介绍第三种方式 (我更为喜欢的方法),即使用对象进行快速地查找。
pingan8787
2019/08/29
1.3K0

相似问题

重新绘制()方法,而不是重新绘制JPanel

12

我如何才能让它不是重新绘制这个对象,而是在多个点上多次绘制它?

10

我如何才能使用相同的代码,而不必每次在不同的subs中重新键入它?

24

如何在开罗缓存绘制的曲面,并使其使用它而不是重新绘制它?

19

使用类的属性,而不必每次都写下它的名称

110
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档