/** @brief ページ読み込み進行ハンドラ 100% に達したらページ修正、オートログインなどを実施する */ @Override public void onProgressChanged(WebView wv, int progress) { Log.d(TAG, "onProgressChanged = " + progress + " " + wv.getUrl()); if (progress < 100) { if (dlg == null) { dlg = new Dialog(view.getContext()); dlg.setTitle("Loading..."); dlg.show(); } } else { if (dlg != null) { dlg.dismiss(); dlg = null; } if (autoLogin(wv)) { return; } String url = wv.getUrl(); if (url != null && url.startsWith(INNER_URL_PREFIX)) { fixPage(wv); } } }
@Ignore // RT-26710: javafx.scene.web.LeakTest hangs @Test public void testGarbageCollectability() throws InterruptedException { final BlockingQueue<WeakReference<WebPage>> webPageRefQueue = new LinkedBlockingQueue<WeakReference<WebPage>>(); submit( () -> { WebView webView = new WebView(); WeakReference<WebView> webViewRef = new WeakReference<WebView>(webView); WeakReference<WebEngine> webEngineRef = new WeakReference<WebEngine>(webView.getEngine()); webPageRefQueue.add(new WeakReference<WebPage>(webView.getEngine().getPage())); webView = null; System.gc(); assertNull("WebView has not been GCed", webViewRef.get()); assertNull("WebEngine has not been GCed", webEngineRef.get()); }); WeakReference<WebPage> webPageRef = webPageRefQueue.take(); long endTime = System.currentTimeMillis() + 5000; while (true) { System.gc(); if (webPageRef.get() == null) { break; } if (System.currentTimeMillis() > endTime) { fail("WebPage has not been GCed"); } Thread.sleep(100); } }
/** * Request a new window from the client. * * @return The BrowserFrame object stored in the new WebView. */ private BrowserFrame createWindow(boolean dialog, boolean userGesture) { WebView w = mCallbackProxy.createWindow(dialog, userGesture); if (w != null) { return w.getWebViewCore().getBrowserFrame(); } return null; }
public WebView createWindow(boolean dialog, boolean userGesture) { // Do an unsynchronized quick check to avoid posting if no callback has // been set. if (mWebChromeClient == null) { return null; } WebView.WebViewTransport transport = mWebView.new WebViewTransport(); final Message msg = obtainMessage(NOTIFY); msg.obj = transport; synchronized (this) { sendMessage(obtainMessage(CREATE_WINDOW, dialog ? 1 : 0, userGesture ? 1 : 0, msg)); try { wait(); } catch (InterruptedException e) { Log.e(LOGTAG, "Caught exception while waiting for createWindow"); Log.e(LOGTAG, Log.getStackTraceString(e)); } } WebView w = transport.getWebView(); if (w != null) { w.getWebViewCore().initializeSubwindow(); } return w; }
@Override public void onBackPressed() { super.onBackPressed(); if (webView.canGoBack()) { webView.goBack(); } else { Toast.makeText(OAuthActivity.this, getString(R.string.you_cancel_login), Toast.LENGTH_SHORT) .show(); finish(); } }
public void refresh() { webView.clearView(); webView.loadUrl("about:blank"); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null); Animation rotation = AnimationUtils.loadAnimation(this, R.anim.refresh); iv.startAnimation(rotation); refreshItem.setActionView(iv); webView.loadUrl(getWeiboOAuthUrl()); }
@Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); webView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); } else { super.onBackPressed(); } }
public WebViewJavascriptBridge(Activity context, WebView webview, WVJBHandler handler) { this.mContext = context; this.mWebView = webview; this._messageHandler = handler; _messageHandlers = new HashMap<String, WVJBHandler>(); _responseCallbacks = new HashMap<String, WVJBResponseCallback>(); _uniqueId = 0; WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(this, "_WebViewJavascriptBridge"); mWebView.setWebViewClient(new MyWebViewClient()); mWebView.setWebChromeClient(new MyWebChromeClient()); // optional, for show console and alert }
private void initPane() { // WebEngine engine = optionView.getEngine(); try { Document document = Jsoup.connect(webView.getEngine().getLocation()).get(); Element table = document.select("#normal_basket_" + document.select("[name=item_id]").val()).first(); Element td = table.select("td").first(); Elements spans = td.select("span"); Elements selects = td.select("select"); // System.out.println(spans.size()); cmb = new ArrayList<ComboBox>(); for (int i = 0; i < spans.size(); i++) { ObservableList<ValuePair> obs = FXCollections.observableArrayList(); Elements options = selects.get(i).select("option"); for (int k = 0; k < options.size(); k++) { Element option = options.get(k); obs.add(new ValuePair("choice", option.text(), option.val())); } cmb.add(new ComboBox<ValuePair>(obs)); optionArea.getChildren().addAll(new Text(spans.get(i).text()), cmb.get(i)); } } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }
/** @brief オートログイン */ public boolean autoLogin(WebView wv) { String js, fmt; // ログインページに居るかどうか確認 String url = wv.getUrl(); if (url == null || !url.startsWith(LOGIN_URL)) { return false; } // User ID / Pass を取得 SharedPreferences prefs = context.getSharedPreferences(PrefActivity.PREF_NAME, Context.MODE_PRIVATE); String uid = prefs.getString(PrefActivity.PREF_KEY_USERID, ""); String pass = prefs.getString(PrefActivity.PREF_KEY_PASSWORD, ""); // auto login for (int i = 1; i <= 2; i++) { fmt = "javascript:document.getElementById(\"user_id%d\").value=\"%s\""; js = String.format(fmt, i, uid); runJs(wv, js); fmt = "javascript:document.getElementById(\"password%d\").value=\"%s\""; js = String.format(fmt, i, pass); runJs(wv, js); } return true; }
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; }
public void doNav() { String url = urlField.getText().toString(); if (URLUtil.isValidUrl(url) == false) { url = "http://" + url; } urlField.setText(url); webView.requestFocus(); webView.loadUrl(url); navbar.startAnimation(slideUp); }
@Override public void initialize(URL location, ResourceBundle resources) { urlField.setOnAction( event -> { String text = urlField.getText(); urlField.setText("tetetetetetetete"); webView.getEngine().load(text); }); webView .getEngine() .getLoadWorker() .stateProperty() .addListener( (ov, oldState, newState) -> { if (newState == State.SUCCEEDED) { String url = webView.getEngine().getLocation(); urlField.setText(url); if (Pattern.compile("http://item.rakuten.co.jp/.*").matcher(url).find()) { try { Elements tmp; Document document = Jsoup.connect(url).get(); tmp = document.select("input"); tmp = tmp.select("#etime"); if (tmp.size() != 0) { if (!(Long.parseLong(tmp.first().val()) < new Date().getTime())) { entryButton.setDisable(false); } } else { entryButton.setDisable(false); } } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } ; }); entryButton.setOnAction( event -> { urlField.setText("webView disable"); sendEntryTaskController(); }); }
@Override public void initialize(URL location, ResourceBundle resources) { // TODO 自動生成されたメソッド・スタブ addOption.setOnAction( event -> { for (int i = 0; i < cmb.size(); i++) { // System.out.println(cmb.get(i).getValue()); if (cmb.get(i).getValue() == null) { break; } else if (i == cmb.size() - 1) { addTask.setDisable(false); } } }); addTask.setOnAction( event -> { try { String url = webView.getEngine().getLocation(); System.out.println(url); Document document = Jsoup.connect(url).get(); Elements input = document.select("input"); Map params = new HashMap<String, String>(); for (ComboBox cmbx : cmb) { ValuePair vp = (ValuePair) cmbx.getValue(); params.put(vp.getName(), vp.getvalue()); } // System.out.println(input.select("[name=shop_bid]").first()); // System.out.println(input.select("[name=shop_bid]").first().val()); params.put("shop_bid", input.select("[name=shop_bid]").first().val()); params.put("item_id", input.select("[name=item_id]").first().val()); params.put("__event", input.select("[name=__event]").first().val()); params.put("units", "1"); Map map = new HashMap<String, Long>(); // System.out.println(document.select("#stime").size()); if (document.select("#stime").size() != 0) { System.out.println(document.select("#stime")); map.put("stime", Long.parseLong((input.select("#stime").first().val()))); map.put("etime", Long.parseLong((input.select("#etime").first().val()))); } else { map = null; } BuyTask task = new BuyTask(url, params, map); task.call(); this.getScene().getWindow().hide(); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } }); }
@Override public void onClick(View inButton) { boolean isErr = false; if (mTitle.getText().toString().length() == 0) { mTitle.setError("Required"); mTitle.setEms(10); isErr = true; } if (mDesc.getText().toString().length() == 0) { mDesc.setActivated(true); mDesc.setError("Required"); isErr = true; } if (inButton.getId() == openWeb.getId()) web.setVisibility(View.VISIBLE); else if (inButton.getId() == mAvail.getId()) startActivity(new Intent(this, CheckActivity.class)); else if (inButton.getId() == mBack.getId()) finish(); else if (inButton.getId() == mSub.getId()) { AlertDialog.Builder al = new AlertDialog.Builder(this); if (isErr) return; else al.setTitle("Continue?") .setIcon(R.drawable.ornament) .setMessage("Your listing is going to be submitted to your chosen category.") .setPositiveButton( "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int x) { payment = new ArrayList<String>(); if (mCard.isChecked()) payment.add("Card"); if (mCheck.isChecked()) payment.add("Check"); if (mOnline.isChecked()) payment.add("Online"); if (mCash.isChecked()) payment.add("Cash"); // Toast.makeText(getApplicationContext(), payment.toString(), // Toast.LENGTH_LONG).show(); Intent intent = new Intent(getApplicationContext(), StartActivity.class); intent.putExtra("Payment", payment); intent.putExtra("Category", mChosenCategory); intent.putExtra("Title", mTitle.getText().toString()); intent.putExtra("Price", mPrice.getText().toString()); intent.putExtra("Description", mDesc.getText().toString()); intent.putExtra("Location", mLocation.getText().toString()); intent.putExtra("Photo", jpegData); startActivity(intent); } }) .setNegativeButton( "Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int x) {} }) .show(); } else startActivityForResult( new Intent(this, com.lightbox.android.camera.activities.Camera.class), REQ); }
@DSComment("Private Method") @DSBan(DSCat.PRIVATE_METHOD) @DSGenerator( tool_name = "Doppelganger", tool_version = "2.0", generated_on = "2013-12-30 12:32:41.986 -0500", hash_original_method = "A59843A23C4CF1F3FD140F676EC35D8E", hash_generated_method = "20C50B3A68FF077FC0E66FC1B4666469") private synchronized String getSignedPublicKey(int index, String challenge, String url) { WebView current = sCurrentMainWebView.get(); if (current != null) { // generateKeyPair expects organizations which we don't have. Ignore // url. return CertTool.getSignedPublicKey(current.getContext(), index, challenge); } else { Log.e(LOGTAG, "There is no active WebView for getSignedPublicKey"); return ""; } }
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { if (url.startsWith(URLHelper.DIRECT_URL)) { handleRedirectUrl(view, url); view.stopLoading(); return; } super.onPageStarted(view, url, favicon); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.oauthactivity_layout); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setTitle(getString(R.string.login)); webView = (WebView) findViewById(R.id.webView); webView.setWebViewClient(new WeiboWebViewClient()); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setSaveFormData(false); settings.setSavePassword(false); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setRenderPriority(WebSettings.RenderPriority.HIGH); CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.removeAllCookie(); }
private void writeDeveloperError(WebView webView, Exception e, OutputStream entityStream) { try { // Note: // This could be seen as a "server error", but we don't set the Status header to 500 because // we want to be // able to distinguish between actual server errors (internal Mayocat Shop server error) and // theme // developers errors (which this is). // This is comes at play when setting up monitoring with alerts on a number of 5xx response // above a // certain threshold. // Re-serialize the context as json with indentation for better debugging ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.INDENT_OUTPUT, true); Map<String, Object> context = webView.data(); String jsonContext = mapper.writeValueAsString(context); Template error = new Template( "developerError", Resources.toString( Resources.getResource("templates/developerError.html"), Charsets.UTF_8)); Map<String, Object> errorContext = Maps.newHashMap(); errorContext.put( "error", StringEscapeUtils.escapeXml(cleanErrorMessageForDisplay(e.getMessage()))); errorContext.put("stackTrace", StringEscapeUtils.escapeXml(ExceptionUtils.getStackTrace(e))); errorContext.put("context", StringEscapeUtils.escapeXml(jsonContext).trim()); errorContext.put("rawContext", jsonContext); errorContext.put("template", webView.template().toString()); engine.get().register(error); String rendered = engine.get().render(error.getId(), mapper.writeValueAsString(errorContext)); entityStream.write(rendered.getBytes()); } catch (Exception e1) { throw new RuntimeException(e1); } }
@Override protected void onPause() { super.onPause(); if (isFinishing()) webView.stopLoading(); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.profile); findViews(); /*Select Category work */ final String[] categories = getIntent().getStringArrayExtra("Options"); ArrayAdapter<String> catadapt; catadapt = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); mCatSpin.setAdapter(catadapt); mCatSpin.setOnItemSelectedListener( new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) { mChosenCategory = categories[pos]; } public void onNothingSelected(AdapterView<?> parent) {} }); /*Availability selection work*/ mAvail = (Button) findViewById(R.id.editavail); mAvail.setOnClickListener(this); /*Submit/Back button work*/ mSub = (Button) findViewById(R.id.submitbutton); mSub.setOnClickListener(this); mBack.setOnClickListener(this); /*Web View & Camera uploader work*/ openCam.setOnClickListener(this); openWeb.setOnClickListener(this); web.getSettings().setJavaScriptEnabled(true); web.loadUrl("http://www.monkbananas.com/uploader/index.php"); // ------Everything below this line was found on StackOverflow-------------------- web.setWebChromeClient( new WebChromeClient() { @Override public boolean shouldOverrideUrlLoading(WebView v, String url) { web.loadUrl(url); return true; } // The undocumented magic method override // Eclipse will swear at you if you try to put @Override here // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } // For Android 3.0+ public void openFileChooser(ValueCallback uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } // For Android 4.1 public void openFileChooser( ValueCallback<Uri> uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } }); }
/** * Notify the host application that a key was not handled by the WebView. Except system keys, * WebView always consumes the keys in the normal flow or if shouldOverrideKeyEvent returns true. * This is called asynchronously from where the key is dispatched. It gives the host application a * chance to handle the unhandled key events. * * @param view The WebView that is initiating the callback. * @param event The key event. */ public void onUnhandledKeyEvent(WebView view, KeyEvent event) { ViewRootImpl root = view.getViewRootImpl(); if (root != null) { root.dispatchUnhandledKey(event); } }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linearLayout = (LinearLayout) findViewById(R.id.linearLayout); linearLayout.setBackgroundColor(Color.BLACK); // Navbar setup navbar = (LinearLayout) findViewById(R.id.navbar); goButton = (Button) findViewById(R.id.go_button); urlField = (EditText) findViewById(R.id.url); goButton.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { doNav(); } }); urlField.setOnEditorActionListener( new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_GO) { doNav(); handled = true; } return handled; } }); SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); String lastUrl = settings.getString("lastUrl", ""); urlField.setText(lastUrl); // Navbar animation settings AnimationListener slideListener = new AnimationListener() { @Override public void onAnimationEnd(Animation animation) { if (animation.equals(slideUp)) { navbar.setVisibility(View.GONE); } } @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationStart(Animation animation) { if (animation.equals(slideDown)) { navbar.setVisibility(View.VISIBLE); } } }; slideUp = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f); slideUp.setDuration(500); slideUp.setAnimationListener(slideListener); slideDown = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f); slideDown.setDuration(500); slideDown.setAnimationListener(slideListener); // WebView setup webView = (WebView) findViewById(R.id.webView); WebSettings webSettings = webView.getSettings(); webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient( new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { Log.d("scale", view.getScale() + ""); Log.d("pageFinished", url); view.setInitialScale(70); if (url.equalsIgnoreCase(HOME_PAGE)) { // navbar.setVisibility(View.VISIBLE); navbar.startAnimation(slideDown); } } @Override public void onScaleChanged(WebView view, float oldScale, float newScale) { Log.d("scale changed", oldScale + " - " + newScale); if (newScale > 0.7) { Log.d("scale", "reset"); // view.setInitialScale(70); } } }); webView.setInitialScale(70); webView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); webView.setVerticalScrollBarEnabled(false); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); webView.setOverScrollMode(WebView.OVER_SCROLL_NEVER); webSettings.setBuiltInZoomControls(true); webSettings.setDisplayZoomControls(false); webSettings.setSupportZoom(true); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); webSettings.setPluginState(WebSettings.PluginState.ON); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setDatabaseEnabled(true); webSettings.setDatabasePath( "/data/data/" + webView.getContext().getPackageName() + "/databases/"); webSettings.setSaveFormData(false); webSettings.setLightTouchEnabled(false); webSettings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); webSettings.setRenderPriority(RenderPriority.HIGH); webSettings.setUserAgentString( "Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Large Screen Safari/534.24 GoogleTV"); final Intent intent = getIntent(); if ((intent.getAction() == Intent.ACTION_VIEW) && (intent.getData() != null)) { final String url = intent.getDataString(); urlField.setText(url); webView.loadUrl(url); navbar.setVisibility(View.GONE); } else { webView.loadUrl(HOME_PAGE); } webView.requestFocus(); }
public void run() { WebView webView = new WebView(); webView.mainLaunch(link); }
@Override protected void onDestroy() { super.onDestroy(); webView.clearCache(true); }
@Override public void handleMessage(Message msg) { // We don't have to do synchronization because this function operates // in the UI thread. The WebViewClient and WebChromeClient functions // that check for a non-null callback are ok because java ensures atomic // 32-bit reads and writes. switch (msg.what) { case PAGE_STARTED: if (mWebViewClient != null) { mWebViewClient.onPageStarted(mWebView, msg.getData().getString("url"), (Bitmap) msg.obj); } break; case PAGE_FINISHED: if (mWebViewClient != null) { mWebViewClient.onPageFinished(mWebView, (String) msg.obj); } break; case RECEIVED_ICON: if (mWebChromeClient != null) { mWebChromeClient.onReceivedIcon(mWebView, (Bitmap) msg.obj); } break; case RECEIVED_TITLE: if (mWebChromeClient != null) { mWebChromeClient.onReceivedTitle(mWebView, (String) msg.obj); } break; case TOO_MANY_REDIRECTS: Message cancelMsg = (Message) msg.getData().getParcelable("cancelMsg"); Message continueMsg = (Message) msg.getData().getParcelable("continueMsg"); if (mWebViewClient != null) { mWebViewClient.onTooManyRedirects(mWebView, cancelMsg, continueMsg); } else { cancelMsg.sendToTarget(); } break; case REPORT_ERROR: if (mWebViewClient != null) { int reasonCode = msg.arg1; final String description = msg.getData().getString("description"); final String failUrl = msg.getData().getString("failingUrl"); mWebViewClient.onReceivedError(mWebView, reasonCode, description, failUrl); } break; case RESEND_POST_DATA: Message resend = (Message) msg.getData().getParcelable("resend"); Message dontResend = (Message) msg.getData().getParcelable("dontResend"); if (mWebViewClient != null) { mWebViewClient.onFormResubmission(mWebView, dontResend, resend); } else { dontResend.sendToTarget(); } break; case OVERRIDE_URL: String overrideUrl = msg.getData().getString("url"); boolean override = uiOverrideUrlLoading(overrideUrl); ResultTransport<Boolean> result = (ResultTransport<Boolean>) msg.obj; synchronized (this) { result.setResult(override); notify(); } break; case AUTH_REQUEST: if (mWebViewClient != null) { HttpAuthHandler handler = (HttpAuthHandler) msg.obj; String host = msg.getData().getString("host"); String realm = msg.getData().getString("realm"); mWebViewClient.onReceivedHttpAuthRequest(mWebView, handler, host, realm); } break; case SSL_ERROR: if (mWebViewClient != null) { HashMap<String, Object> map = (HashMap<String, Object>) msg.obj; mWebViewClient.onReceivedSslError( mWebView, (SslErrorHandler) map.get("handler"), (SslError) map.get("error")); } break; case PROGRESS: // Synchronize to ensure mLatestProgress is not modified after // setProgress is called and before mProgressUpdatePending is // changed. synchronized (this) { if (mWebChromeClient != null) { mWebChromeClient.onProgressChanged(mWebView, mLatestProgress); } mProgressUpdatePending = false; } break; case UPDATE_VISITED: if (mWebViewClient != null) { mWebViewClient.doUpdateVisitedHistory(mWebView, (String) msg.obj, msg.arg1 != 0); } break; case LOAD_RESOURCE: if (mWebViewClient != null) { mWebViewClient.onLoadResource(mWebView, (String) msg.obj); } break; case DOWNLOAD_FILE: if (mDownloadListener != null) { String url = msg.getData().getString("url"); String userAgent = msg.getData().getString("userAgent"); String contentDisposition = msg.getData().getString("contentDisposition"); String mimetype = msg.getData().getString("mimetype"); Long contentLength = msg.getData().getLong("contentLength"); mDownloadListener.onDownloadStart( url, userAgent, contentDisposition, mimetype, contentLength); } break; case CREATE_WINDOW: if (mWebChromeClient != null) { if (!mWebChromeClient.onCreateWindow( mWebView, msg.arg1 == 1, msg.arg2 == 1, (Message) msg.obj)) { synchronized (this) { notify(); } } } break; case REQUEST_FOCUS: if (mWebChromeClient != null) { mWebChromeClient.onRequestFocus(mWebView); } break; case CLOSE_WINDOW: if (mWebChromeClient != null) { mWebChromeClient.onCloseWindow((WebView) msg.obj); } break; case SAVE_PASSWORD: Bundle bundle = msg.getData(); String schemePlusHost = bundle.getString("host"); String username = bundle.getString("username"); String password = bundle.getString("password"); // If the client returned false it means that the notify message // will not be sent and we should notify WebCore ourselves. if (!mWebView.onSavePassword(schemePlusHost, username, password, (Message) msg.obj)) { synchronized (this) { notify(); } } break; case ASYNC_KEYEVENTS: if (mWebViewClient != null) { mWebViewClient.onUnhandledKeyEvent(mWebView, (KeyEvent) msg.obj); } break; case JS_ALERT: if (mWebChromeClient != null) { JsResult res = (JsResult) msg.obj; String message = msg.getData().getString("message"); String url = msg.getData().getString("url"); if (!mWebChromeClient.onJsAlert(mWebView, url, message, res)) { res.handleDefault(); } res.setReady(); } break; case JS_CONFIRM: if (mWebChromeClient != null) { JsResult res = (JsResult) msg.obj; String message = msg.getData().getString("message"); String url = msg.getData().getString("url"); if (!mWebChromeClient.onJsConfirm(mWebView, url, message, res)) { res.handleDefault(); } // Tell the JsResult that it is ready for client // interaction. res.setReady(); } break; case JS_PROMPT: if (mWebChromeClient != null) { JsPromptResult res = (JsPromptResult) msg.obj; String message = msg.getData().getString("message"); String defaultVal = msg.getData().getString("default"); String url = msg.getData().getString("url"); if (!mWebChromeClient.onJsPrompt(mWebView, url, message, defaultVal, res)) { res.handleDefault(); } // Tell the JsResult that it is ready for client // interaction. res.setReady(); } break; case JS_UNLOAD: if (mWebChromeClient != null) { JsResult res = (JsResult) msg.obj; String message = msg.getData().getString("message"); String url = msg.getData().getString("url"); if (!mWebChromeClient.onJsBeforeUnload(mWebView, url, message, res)) { res.handleDefault(); } res.setReady(); } break; case RECEIVED_CERTIFICATE: mWebView.setCertificate((SslCertificate) msg.obj); break; case NOTIFY: synchronized (this) { notify(); } break; case SCALE_CHANGED: if (mWebViewClient != null) { mWebViewClient.onScaleChanged( mWebView, msg.getData().getFloat("old"), msg.getData().getFloat("new")); } break; case SWITCH_OUT_HISTORY: mWebView.switchOutDrawHistory(); break; } }
private void loadWebViewJavascriptBridgeJs(WebView webView) { InputStream is = mContext.getResources().openRawResource(R.raw.webviewjavascriptbridge); String script = convertStreamToString(is); webView.loadUrl("javascript:" + script); }
/** @brief JavaScript 実行 */ private void runJs(WebView wv, String js) { wv.loadUrl(js); Log.d(TAG, "exec js: " + js); }
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
@Override public void writeTo( WebView webView, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { try { if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE) && webContext.getTheme() != null && !webContext.getTheme().isValidDefinition()) { // Fail fast with invalid theme error page, so that the developer knows ASAP and can correct // it. writeHttpError("Invalid theme definition", entityStream); return; } Template masterTemplate = null; try { masterTemplate = themeFileResolver.getIndexTemplate(webContext.getRequest().getBreakpoint()); } catch (TemplateNotFoundException e) { if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) { // For JSON API calls, we don't care if the template is found or not. // For other calls, raise the exception throw e; } } Template template = null; String jsonContext = null; if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) { if (webView.model().isPresent()) { // Check for a model Optional<String> path = themeFileResolver.resolveModelPath(webView.model().get()); if (path.isPresent()) { try { template = themeFileResolver.getTemplate( path.get(), webContext.getRequest().getBreakpoint()); } catch (TemplateNotFoundException e) { // Keep going } } // else just fallback on the default model } if (template == null) { try { template = themeFileResolver.getTemplate( webView.template().toString(), webContext.getRequest().getBreakpoint()); } catch (TemplateNotFoundException e) { if (webView.hasOption(WebView.Option.FALLBACK_ON_DEFAULT_THEME)) { try { template = themeFileResolver.getTemplate( themeManager.getDefaultTheme(), webView.template().toString(), webContext.getRequest().getBreakpoint()); } catch (TemplateNotFoundException e1) { // continue } } if (template == null && webView.hasOption(WebView.Option.FALLBACK_ON_GLOBAL_TEMPLATES)) { template = themeFileResolver.getGlobalTemplate( webView.template().toString(), webContext.getRequest().getBreakpoint()); } } } } if (!mediaType.equals(MediaType.APPLICATION_JSON_TYPE) || httpHeaders.containsKey("X-Mayocat-Full-Context")) { if (template != null) { webView.data().put("templateContent", template.getId()); webView.data().put("template", FilenameUtils.getBaseName(webView.template().toString())); } for (WebDataSupplier supplier : dataSuppliers.values()) { supplier.supply(webView.data()); } } try { ObjectMapper mapper = new ObjectMapper(); if (mediaType.equals(MediaType.APPLICATION_JSON_TYPE)) { mapper.writeValue(entityStream, webView.data()); return; } if (template == null) { throw new TemplateNotFoundException(); } jsonContext = mapper.writeValueAsString(webView.data()); engine.get().register(template); engine.get().register(masterTemplate); String rendered = engine.get().render(masterTemplate.getId(), jsonContext); entityStream.write(rendered.getBytes()); } catch (JsonMappingException e) { this.logger.warn("Failed to serialize JSON context", e); writeDeveloperError(webView, e, entityStream); } catch (TemplateEngineException e) { writeDeveloperError(webView, e, entityStream); } } catch (TemplateNotFoundException e) { throw new WebApplicationException( Response.status(Response.Status.INTERNAL_SERVER_ERROR) .entity("Template not found : " + webView.template().toString()) .build()); } }