@SuppressLint({"AddJavascriptInterface", "SetJavaScriptEnabled"}) private void init() { setClickable(false); setFocusable(false); setHorizontalScrollBarEnabled(false); WebSettings settings = getSettings(); settings.setDefaultFontSize(14); settings.setSupportZoom(false); settings.setBuiltInZoomControls(false); settings.setDisplayZoomControls(false); settings.setJavaScriptEnabled(true); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { addJavascriptInterface(new OnWebViewImageListener() { @Override @JavascriptInterface public void showImagePreview(String bigImageUrl) { if (bigImageUrl != null && !StringUtils.isEmpty(bigImageUrl)) { ImageGalleryActivity.show(getContext(), bigImageUrl); } } }, "mWebViewImageListener"); } }
@JavascriptInterface public void fun_openCamera(String jsonString) { JSInBean jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); try { int options = (int) (new JSONObject(jsInBean.getName()).getDouble("scale") * 100.0d); if (this.activityHandler != null) { Message message = new Message(); message.what = 3; message.obj = Integer.valueOf(options); Bundle bundle = new Bundle(); bundle.putString(a.c, jsInBean.getCallback()); bundle.putString("callback_id", jsInBean.getCallback_id()); message.setData(bundle); this.activityHandler.sendMessage(message); } } catch (JSONException e) { e.printStackTrace(); } this.mActivity.startActivityForResult(new android.content.Intent("android.media.action.IMAGE_CAPTURE"), 10003); }
/** * 获取经纬度集合 * * @param str */ @JavascriptInterface public void locationList(final String str) { if (TextUtils.isEmpty(str)) { Toast.makeText(activity, "鏆傛棤鏁版嵁!", 1000).show(); return; } // startActivity(new Intent(activity, OverlayDemo.class) // .putExtra("locationStr", str)); // runOnUiThread(new Runnable() { // @Override // public void run() { // startActivity(new // Intent(activity,OverlayDemo.class).putExtra("locationStr", // str)); // //Toast.makeText(htmlUIActivity, str+"", 1000).show(); // //System.out.println("str----------"+str); // } // }); }
@JavascriptInterface public void fun_getStorage(String jsonString) { LogInfo.log("ZSM webview js fun_getStorage jsonString: " + jsonString); JSInBean jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); try { JSONArray name = new JSONArray(jsInBean.getName()); StringBuilder builder = new StringBuilder(); builder.append("{"); for (int i = 0; i < name.length(); i++) { String key = name.getString(i); builder.append("\"" + key + "\":"); builder.append(FileUtils.getApiFileCache(BaseApplication.getInstance(), key)); if (i != name.length() - 1) { builder.append(","); } } builder.append("}"); LogInfo.log("ZSM webview js fun_getStorage result: " + builder.toString()); jsCallBack(jsInBean, builder.toString()); } catch (JSONException e) { e.printStackTrace(); jsCallBack(jsInBean, RESULT_FAIL); } }
@JavascriptInterface public void uploadFile() { if (mActivityWeakReference.get() != null && mReference.get() != null) { mIFileUploadChooser = new FileUpLoadChooserImpl.Builder() .setActivity(mActivityWeakReference.get()) .setJsChannelCallback(new FileUpLoadChooserImpl.JsChannelCallback() { @Override public void call(String value) { if (mReference.get() != null) mReference.get().getJsEntraceAccess().quickCallJs("uploadFileResult", value); } }).setFileUploadMsgConfig(mReference.get().getDefaultMsgConfig().getChromeClientMsgCfg().getFileUploadMsgConfig()) .setPermissionInterceptor(mReference.get().getPermissionInterceptor()) .setWebView(mReference.get().getWebCreator().get()) .build(); mIFileUploadChooser.openFileChooser(); } }
@JavascriptInterface public void fun_setStorage(String jsonString) { LogInfo.log("ZSM webview js fun_setStorage jsonString: " + jsonString); JSInBean jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); try { JSONArray name = new JSONArray(jsInBean.getName()); for (int i = 0; i < name.length(); i++) { JSONObject object = name.getJSONObject(i); String key = object.getString("key"); String value = object.getString(Constants.VALUE_ID); LogInfo.log("ZSM webview js fun_setStorage key: " + key + " value == " + value); FileUtils.saveApiFileCache(BaseApplication.getInstance(), key, value); } jsCallBack(jsInBean, RESULT_SUCCEED); } catch (JSONException e) { e.printStackTrace(); jsCallBack(jsInBean, RESULT_FAIL); } }
@JavascriptInterface public void fun_callLogout(String jsonString) { LogInfo.log("lxx", "jsonString: " + jsonString); JSInBean jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); Map<String, Integer> map = new HashMap(); map.put("result", Integer.valueOf(200)); JSONObject logoutResultJson = new JSONObject(map); try { String callString = buildupJSCallString(jsInBean.getCallback(), jsInBean.getCallback_id(), logoutResultJson.toString()); LogInfo.log("lxx", "fun_callLogout callString: " + callString); new Handler(Looper.getMainLooper()).post(new 3(this, callString)); PreferencesManager.getInstance().logoutUser(); String s = "javascript:LetvJSBridge.fireEvent('onlogout','" + logoutResultJson.toString() + "')"; LogInfo.log("lxx", "fun_callLogout callString: " + s); new Handler(Looper.getMainLooper()).post(new 4(this, s)); CookieManager.getInstance().removeAllCookie(); } catch (Exception e) { e.printStackTrace(); } }
@JavascriptInterface public void core_getUserInfo(String jsonString) { LogInfo.log("lxx", "fun_setStatus jsonString: " + jsonString); JSInBean jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); try { Map<String, Object> map = new HashMap(); map.put("username", PreferencesManager.getInstance().getUserName()); map.put("nickname", PreferencesManager.getInstance().getNickName()); map.put(NotificationCompat.CATEGORY_EMAIL, PreferencesManager.getInstance().getEmail()); map.put("ssouid", PreferencesManager.getInstance().getSsouid()); map.put("userlevel", Integer.valueOf(PreferencesManager.getInstance().getVipLevel())); if (1 == PreferencesManager.getInstance().getVipLevel()) { map.put("lasttime", Long.valueOf(PreferencesManager.getInstance().getVipCancelTime())); } else if (2 == PreferencesManager.getInstance().getVipLevel()) { map.put("lasttime", Long.valueOf(PreferencesManager.getInstance().getSeniorVipCancelTime())); } jsCallBack(jsInBean, new JSONObject(map).toString()); } catch (Exception e) { e.printStackTrace(); } }
@JavascriptInterface public void show(String data) { LogInfo.log("ZSM Handler show == " + data); try { UserBean result = (UserBean) new OpenUserParser().doParse(data); PreferencesManager.getInstance().setUserName(result.username); PreferencesManager.getInstance().setUserId(result.uid); PreferencesManager.getInstance().setSso_tk(result.tv_token); PreferencesManager.getInstance().setRemember_pwd(true); PreferencesManager.getInstance().setNickName(result.nickname); PreferencesManager.getInstance().setUserMobile(result.mobile); PreferencesManager.getInstance().setPicture(result.picture); this.this$0.mRequestLoginTaskCallBack(); } catch (Exception e) { e.printStackTrace(); } }
@JavascriptInterface public String eval(final String script) { result = null; mWebView.post(new Runnable() { @Override public void run() { Log.v(TAG, "ScriptBridge.eval: " + script); result = mContext.evaluateString(mScriptable, script, "<eval-local>", 1, null); Log.v(TAG, "ScriptBridge.eval = " + result); synchronized (ScriptBridge.this) { ScriptBridge.this.notify(); } } }); synchronized (ScriptBridge.this) { try { ScriptBridge.this.wait(); } catch (InterruptedException e) { throw new ScriptInterruptedException(); } } return result.toString(); }
/** * 该方法将被js调用,用于加载数据 */ @JavascriptInterface public void showcontacts() { // Thread[JavaBridge,5,main] Log.e(TAG, "js " + Thread.currentThread().toString()); // 下面的代码建议在子线程中调用 webView.post(new Runnable() { @Override public void run() { String json = "[{\"name\":\"siri\", \"phone\":\"18600012345\"}]"; // 调用JS中的方法 webView.loadUrl("javascript:show('" + json + "')"); } }); }
@JavascriptInterface public void imageClick(String imgUrl, String hasLink) { // Toast.makeText(context, "----点击了图片", Toast.LENGTH_SHORT).show(); // 查看大图 // Intent intent = new Intent(context, ViewBigImageActivity.class); // context.startActivity(intent); Log.e("----点击了图片 url: ", "" + imgUrl); }
@JavascriptInterface public void onPushpinAdded() { Log.i(TAG, "onPushpinAdded"); new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { IPushpinAddCallback callback = (IPushpinAddCallback) mHandler.getInterface(IPushpinAddCallback.class); if (callback != null) { callback.onPushpinAdded(); } } }); }
@JavascriptInterface public void showProduct(String productId){ if(productId!=null){ //进行跳转商品详情 showToastMsgShort("点击的商品的ID为:" + productId); }else { showToastMsgShort("商品ID为空!"); } }
@JavascriptInterface public void setProfile(String json) {//base属性 + img属性 拼接去取图片 goods是JSONobject if (json != null) { try { pList = new ArrayList<>(); //解析json JSONObject object = new JSONObject(json); lri = new LiveRoomInfo(); lri.setuId(object.getString("uid")); lri.setAcId(object.getString("acid")); lri.setNickName(object.getString("nickname")); lri.setOpenId(object.getString("openid")); lri.setEventUrl(object.getString("eventurl")); lri.setPushUrl(object.getString("pushurl")); lri.setRoomImgUrl(object.getString("roomimg")); lri.setMemberlevelid(String.valueOf(object.getInt("memberlevelid"))); String goods = object.getString("goods"); JSONArray object_goods = new JSONArray(goods); for (int i = 0; i < object_goods.length(); i++) { JSONObject object_good = object_goods.getJSONObject(i); products = new Products(); products.setProducts_id(object_good.getString("id")); products.setProducts_name(object_good.getString("name")); products.setProducts_price(object_good.getString("price")); mBase = object.getString("base"); String mBaseUrl = object_good.getString("img").startsWith("//") ? "http:" : object.getString("base"); products.setProducts_icon(mBaseUrl + object_good.getString("img")); pList.add(products); } } catch (JSONException e) { e.printStackTrace(); } } }
@SuppressWarnings("unused") @JavascriptInterface public void showLog(final String stringArgs, WebView webView) { utils.debugLog("in WebView Showlog " + stringArgs); utils.debugLog("In Thread " + Thread.currentThread().getId() + " Recognized non-english string: " + stringArgs); final GetTranslate getTranslate = new GetTranslate(); getTranslate.stringToBeTrans = stringArgs; getTranslate.originalCallable = this; getTranslate.userData = new WebHookUserData(webView, stringArgs); getTranslate.canCallOriginal = true; if (SetTextHookHandler.isNotWhiteSpace(getTranslate.stringToBeTrans)) { GetTranslateToken getTranslateToken = new GetTranslateToken(); getTranslateToken.getTranslate = getTranslate; if (PreferenceList.Caching) { alltrans.cacheAccess.acquireUninterruptibly(); if (alltrans.cache.containsKey(stringArgs)) { final String translatedString = alltrans.cache.get(stringArgs); utils.debugLog("In Thread " + Thread.currentThread().getId() + " found string in cache: " + stringArgs + " as " + translatedString); alltrans.cacheAccess.release(); new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { @Override public void run() { callOriginalMethod(translatedString, getTranslate.userData); } }, PreferenceList.Delay); return; } else { alltrans.cacheAccess.release(); } } getTranslateToken.doAll(); } }
/** * @return content */ @JavascriptInterface public String getContent() { if (encoded) try { return new String(EncodingUtils.fromBase64(content), "UTF-8"); } catch (UnsupportedEncodingException e) { return getRawContent(); } else return getRawContent(); }
@JavascriptInterface public void openCamera(String liveId, String json) { //清空自己的直播间的商品 if (pList.size() != 0) pList.clear(); //邀约直播的参数 Intent in = new Intent(WebActivity.this, PushParamsActivity.class); try { JSONObject jsonObject = new JSONObject(json); String pushUrl = jsonObject.getString("rtmp"); String memberLevel = jsonObject.getString("memberlevel"); String openId = jsonObject.getString("deleid"); String goods = jsonObject.getString("goods"); JSONArray object_goods = new JSONArray(goods); for (int i = 0; i < object_goods.length(); i++) { JSONObject object_good = object_goods.getJSONObject(i); products = new Products(); products.setProducts_id(object_good.getString("id")); products.setProducts_name(object_good.getString("name")); products.setProducts_price(object_good.getString("price")); String baseUrl = object_good.getString("img").startsWith("//") ? "http:" : mBase; products.setProducts_icon(baseUrl + object_good.getString("img")); pList.add(products); } in.putExtra("pushurl", pushUrl); in.putExtra("openid", openId); in.putExtra("memberlevelid", memberLevel); in.putExtra("eventurl", lri.getEventUrl()); in.putParcelableArrayListExtra("products_list", pList); } catch (JSONException e) { e.printStackTrace(); } shareInfo.setLiveId(liveId); in.putExtra("shareinfo", shareInfo); startActivity(in); }
@JavascriptInterface public void loadingCompleted() { mContext.runOnUiThread(new Runnable() { @Override public void run() { mContext.setLoading(false); } }); }
@JavascriptInterface public void loadHtmlContent(String content) { if (TextUtils.isEmpty(content)) { Toast.makeText(context, "暂无可分享内容", Toast.LENGTH_SHORT).show(); return; } AppUtils.getInstance().shareText(context, "来自知道日报: \n" + content); }
@JavascriptInterface public void getNums(final String notifications, final String messages, final String requests, final String feed) { final int notifications_int = MakiHelpers.isInteger(notifications) ? Integer.parseInt(notifications) : 0; final int messages_int = MakiHelpers.isInteger(messages) ? Integer.parseInt(messages) : 0; final int requests_int = MakiHelpers.isInteger(requests) ? Integer.parseInt(requests): 0; final int feed_int = MakiHelpers.isInteger(feed) ? Integer.parseInt(feed): 0; mContext.runOnUiThread(new Runnable() { @Override public void run() { mContext.setNotificationNum(notifications_int); mContext.setMessagesNum(messages_int); } }); }
/** * 由于安全原因 targetSdkVersion >= 17 需要加 @JavascriptInterface * JS 调用 Android JAVA 方法名和 HTML 中的按钮 onclick 后的别名后面的名字对应 */ @JavascriptInterface public void startFunction() { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, "show", Toast.LENGTH_SHORT).show(); } }); }
@JavascriptInterface public void showDialog(int a, float b, String c, boolean d) { if (d) { String msg = "a + b + c = " + a + b + c; new AlertDialog.Builder(MainActivity.this) .setMessage(msg) .show(); } }
@JavascriptInterface public void LogOut(String values) { handler.post(new Runnable() { @Override public void run() { Log.d("js", "LoginOut"); String filename = userCookieName; HelperSP.deleteToSP(activity, "UserInfo"); } }); }
@JavascriptInterface public void fun_setShare(String jsonString) { LogInfo.log("lxx", "fun_setShare jsonString: " + jsonString); jsInBean = JSBridgeUtil.getInstance().parseJsonArray(jsonString); if (this.mActivity instanceof LetvBaseWebViewActivity) { ((LetvBaseWebViewActivity) this.mActivity).parseShareJson(jsonString); } jsCallBack(jsInBean, RESULT_SUCCEED); }
@JavascriptInterface @SuppressWarnings("unused") public void notifyVideoEnd() { Log.e(TAG, "VPAID Ad Completed"); mHandler.post(new Runnable() { @Override public void run() { if (fsmPlayer != null) { fsmPlayer.removePlayedAdAndTransitToNextState(); } } }); }
/** * 收集图片(当发现图片时会调用该方法) * * @param url 图片链接 */ @JavascriptInterface public void collectImage(final String url) { Logger.e("collect:" + url); if (UrlUtil.isGifSuffix(url)){ return; } if (!mImages.contains(url)) mImages.add(url); }
@JavascriptInterface public void onScriptLoadSuccess() { Log.i(TAG, "onScriptLoadSuccess"); new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { IBingMapScriptLoadCallback callback = (IBingMapScriptLoadCallback) mHandler.getInterface(IBingMapScriptLoadCallback.class); if (callback != null) { callback.onScriptLoadSuccess(); } } }); }
/** * Called if a function has finished with error * * @param result the error result which is returned by the javascript method * @param key the key which identify which observers are responsible for handle the error */ @JavascriptInterface @SuppressWarnings("unused") public void onError(final String result, final String key) { final Callback<? super String, ? super String> subscriber = observers.get(key); if (subscriber != null) { subscriber.onError(result); observers.remove(key); decrementIdlingResource(); } }
/** * 添加网页的点击图片展示支持 */ @SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"}) @JavascriptInterface public static void addWebImageShow(final Context cxt, WebView wv) { wv.getSettings().setJavaScriptEnabled(true); wv.addJavascriptInterface(new OnWebViewImageListener() { @Override @JavascriptInterface public void showImagePreview(String bigImageUrl) { if (bigImageUrl != null && !StringUtils.isEmpty(bigImageUrl)) { ImageGalleryActivity.show(cxt, bigImageUrl); } } }, "mWebViewImageListener"); }
@JavascriptInterface public void onPoint(final int x, final int y) { Log.i(TAG, "onPoint"); new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { IBingScreenLocationCallback callback = (IBingScreenLocationCallback) mHandler.getInterface(IBingScreenLocationCallback.class); if (callback != null) { callback.onPoint(new Point(x, y)); } } }); }
@JavascriptInterface public void onGotImages(String[] imgList) { for (OnJsCallbackListener item : onJsCallbackListenerSet) { if (item != null) { item.onGotImages(imgList); } } onJsCallbackListenerSet.clear(); }
@Keep @JavascriptInterface public void onGetChallenge(String challenge) { if (failureRunnable != null) { handler.removeCallbacks(failureRunnable); failureRunnable = null; } else { // FailureRunnable has run return; } final String finalChallenge = challenge; final String finalImage = image; final boolean success = !TextUtils.isEmpty(challenge) || !TextUtils.isEmpty(image); handler.post(new Runnable() { @Override public void run() { if (!destroyed) { destroyed = true; webView.destroy(); if (success) { callback.onSuccess(finalChallenge, finalImage); } else { callback.onFailure(); } } } }); }
@JavascriptInterface public void setResult(String str) { if (str == null) { this.b.a("fail", "unknown_error"); } else if (str.equals("success")) { this.b.a("success"); } else { this.b.a("fail", "unknown_error"); } }
@JavascriptInterface public void injectionFail() { // Log.d("TTT_d", "injectionFail"); runOnUiThread(new Runnable() { @Override public void run() { webView.postDelayed(new Runnable() { @Override public void run() { injection(webView); } }, 1200); } }); }
@JavascriptInterface public String ajax(final String url) { String urlttt = null; if (url != null) { urlttt = url.replaceAll(":", "").replaceAll("/", ""); } final String url2 = urlttt; String rrrr = HelperSP.getFromSP(activity, url2, url2); Thread thread = new Thread(new Runnable() { @Override public void run() { final HttpResult hr = HttpUtil.download(null, url); if (hr != null && hr.result != null && hr.result.equals("") == false) { activity.runOnUiThread(new Runnable() { @SuppressLint("NewApi") @Override public void run() { String execFun = "pdy.loadRes('" + hr.result + "')"; Log.d("js", execFun); activity.webView.evaluateJavascript(execFun, null); } }); HelperSP.saveToSP(activity, url2, url2, hr.result); } } }); thread.start(); return rrrr; }
@JavascriptInterface public static void setCookieByJS(WebView webView) { HashMap<String, String> cookieMap = new HashMap(); cookieMap.put(MODIFYPWD_PARAMETERS.TK_KEY, PreferencesManager.getInstance().getSso_tk()); cookieMap.put("from", "mobile_tv"); String callString = "javascript:LetvJSBridge.fireEvent('onsetcookie','" + new JSONObject(cookieMap).toString() + "')"; LogInfo.log("lxx", "setCookieByJS callString: " + callString); webView.loadUrl(callString); }
/** * Bind content to current {@link WebView} * * @param name * @param content * @param encoded * @return this editor */ @JavascriptInterface public SourceEditor setSource(final String name, final String content, final boolean encoded) { this.name = name; this.content = content; this.encoded = encoded; loadSource(); return this; }
@JavascriptInterface public void callJava(String json){ // 解析 json 看起参数,如果参数有 callback,那么生成一个 callback 函数 // 否则直接分发调用本地方法 NativeObject javaObject = parseJson(json); dispatchMessage(javaObject); }