Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在WebView内的按钮单击上获取值?_Javascript_Android_Webview_Appsflyer - Fatal编程技术网

Javascript 如何在WebView内的按钮单击上获取值?

Javascript 如何在WebView内的按钮单击上获取值?,javascript,android,webview,appsflyer,Javascript,Android,Webview,Appsflyer,我有一个原生的android应用程序,可以进入Web视图进行结账。我正在实施appsflyer,以通过该应用跟踪收入。如何检测页面上单击了哪个按钮,以及收入的项目价格是多少 import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.support.v7.app.AppCom

我有一个原生的android应用程序,可以进入Web视图进行结账。我正在实施appsflyer,以通过该应用跟踪收入。如何检测页面上单击了哪个按钮,以及收入的项目价格是多少

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

import com.appsflyer.AFInAppEventParameterName;
import com.appsflyer.AFInAppEventType;
import com.appsflyer.AppsFlyerLib;

import org.json.JSONException;
import org.json.JSONObject;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class EventActivity extends AppCompatActivity {

    ProgressDialog pDialog;
    Boolean redirecting = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event);

        String appsFlyerUID = AppCore.getInstance(getApplicationContext()).getAppsFlyerUID();
        String idfa = AppCore.getInstance(getApplicationContext()).getMixpanelAdvertisingIdentifier();

        Intent intent = getIntent();

        try {
            JSONObject event = new JSONObject(intent.getStringExtra("event"));

            String eventId = event.getString("id");
            String title = event.getString("title");
            String startsAt = event.getString("starts_at");
            String venue = event.getString("venue");
            String city = event.getString("city");
            String state = event.getString("state");

            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
            Date newDate = format.parse(startsAt);

            format = new SimpleDateFormat("EEEE, MMMM d @ h:mm a");
            String date = format.format(newDate);

            ((TextView)findViewById(R.id.event_title)).setText(title);
            ((TextView)findViewById(R.id.event_date)).setText(date);
            ((TextView)findViewById(R.id.event_venue)).setText(venue + " - " + city + ", " + state);

            String url = "http://tlapi.ticketliquidator.com/event_map/" + eventId + "?utm_campaign=" + idfa + "&utm_term=" + appsFlyerUID;


            Map<String, Object> eventValue = new HashMap<String, Object>();
            AppsFlyerLib.getInstance().trackEvent(getApplicationContext(), "View Event " + eventId,eventValue);


            final WebView wv = (WebView) findViewById(R.id.event_webview);
            wv.getSettings().setJavaScriptEnabled(true);
            final Activity self = this;

            wv.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    redirecting = true;
                    view.loadUrl(url);
                    return true;
                }
                public void onPageFinished(WebView view, String url) {
                    if(redirecting){
                        pDialog.dismiss();
                    }
                }
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    if(redirecting){
                        pDialog = new ProgressDialog(self);
                        pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                        pDialog.setMessage(" Loading...");
                        pDialog.setCancelable(true);
                        pDialog.show();
                    }

                }
            });


            pDialog = new ProgressDialog(this);
            pDialog.setMessage("Getting event...");
            pDialog.show();

            wv.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress) {

                    if(progress == 100)
                        pDialog.dismiss();
                }
            });

            wv.loadUrl(url);
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
}
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.MotionEvent;
导入android.view.view;
导入android.webkit.WebChromeClient;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
导入android.widget.TextView;
导入com.appsflyer.AFInAppEventParameterName;
导入com.appsflyer.AFInAppEventType;
导入com.appsflyer.AppsFlyerLib;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入java.util.HashMap;
导入java.util.Map;
公共类EventActivity扩展了AppCompatActivity{
ProgressDialog;
布尔重定向=假;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_事件);
字符串appsFlyerUID=AppCore.getInstance(getApplicationContext()).getAppsFlyerUID();
字符串idfa=AppCore.getInstance(getApplicationContext()).getMixpanelAdvertisingIdentifier();
Intent=getIntent();
试一试{
JSONObject事件=新的JSONObject(intent.getStringExtra(“事件”);
String eventId=event.getString(“id”);
String title=event.getString(“title”);
String startsAt=event.getString(“开始于”);
字符串地点=event.getString(“地点”);
String city=event.getString(“城市”);
字符串状态=event.getString(“状态”);
SimpleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd'T'hh:MM:ss”);
datenewdate=format.parse(startsAt);
格式=新的简化格式(“EEEE,MMMM d@h:mm a”);
字符串日期=format.format(newDate);
((TextView)findviewbyd(R.id.event_title)).setText(title);
((TextView)findViewById(R.id.event_date)).setText(date);
((TextView)findViewById(R.id.event_vention)).setText(场馆+“-”+城市+”,“+州);
字符串url=”http://tlapi.ticketliquidator.com/event_map/“+eventId+”?utm_活动=“+idfa+”&utm_术语=“+AppsFlyerId;
Map eventValue=new HashMap();
AppsFlyerLib.getInstance().trackEvent(getApplicationContext(),“查看事件”+eventId,eventValue);
最终网络视图wv=(网络视图)findViewById(R.id.event\u网络视图);
wv.getSettings().setJavaScriptEnabled(true);
最终活动自我=此;
wv.setWebViewClient(新的WebViewClient(){
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
重定向=真;
view.loadUrl(url);
返回true;
}
公共void onPageFinished(WebView视图,字符串url){
如果(重定向){
pDialog.disclose();
}
}
public void onPageStarted(WebView视图、字符串url、位图favicon){
如果(重定向){
pDialog=新建进度对话框(self);
pDialog.setProgressStyle(ProgressDialog.STYLE_微调器);
设置消息(“加载…”);
pDialog.setCancelable(真);
pDialog.show();
}
}
});
pDialog=新建进度对话框(此对话框);
setMessage(“获取事件…”);
pDialog.show();
wv.setWebChromeClient(新WebChromeClient(){
public void onProgressChanged(WebView视图,int-progress){
如果(进度==100)
pDialog.disclose();
}
});
wv.loadUrl(url);
}捕获(例外e){
e、 printStackTrace();
}
}
}
这是我的android类的WebView。我正在尝试从这个网页中提取信息


我只需要知道在WebView中单击了哪个按钮,然后在该按钮旁边获取价格。然后我会将其发送回appsflyer进行跟踪。

您无法访问webview中的按钮单击事件,webview用于运行html页面,因此您必须在html页面中编写代码,使用JavaScript捕获onClick事件

你必须用java脚本欺骗它,因为加载页面后,你必须像这样将JavaScript注入加载的网页

@Override
public void onPageFinished(WebView view, String url){
   // your javascript as string which works fine in scratchpad
   String javaScript ="javascript:(function() {alert();})()"; 
   webview.loadUrl(javaScript);
}
这样,您就可以根据需要注入javascript并找到相应的DOM,并在此基础上调用java方法