整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript中常用的輸入輸出語句介紹

          日常開發中,為了方便數據的輸入和輸出,JavaScript提供了一些常用的輸入輸出語句,具體如表1-3所示。
          表1常用的輸入輸出語句

          類型

          語句

          說明

          輸入

          prompt()

          用于在瀏覽器中彈出輸入框,用戶可以輸入內容

          輸出

          alert()

          用于在瀏覽器中彈出警告框

          document.write()

          用于在網頁中輸出內容

          console.log()

          用于在控制臺中輸出信息

          接下來將分別演示document.write0、console.log0和promptO的使用。

          1. document.write()

          document.write0的輸出內容中如果含有HTML標簽,會被瀏覽器解析。下面利用documenL.write0在頁面中輸出“我是document.write0語句!”,示例代碼如下。

          document.write('我是document.write()語句!');

          2. console.log()

          利用console.log0語句在控制臺輸出“我是console.log0語句!”,示例代碼如下。

          console.log('我是console.log()語句!');

          console:.log0的輸出結果需要在瀏覽器的控制臺中查看。在Chrome 瀏覽器中按“F12”鍵(或在網頁空白區域右擊,在彈出的菜單中選擇“檢查”)啟動開發者工具,然后切換到“Console”(控制臺)面板,即可看到console.log0的輸出結果。

          3.prompt()

          利用prompt0語句實現在頁面中彈出一個帶有提示信息的輸入框,示例代碼如下。

          prompt(請輸入姓名:');

          上述示例代碼運行后,將在頁面中彈出一個輸人框并提示用戶“請輸人姓名:”提示框。

          求出現的原因是這樣的:

          我們有一個 h5 頁面既需要嵌套到 App 內部進行用戶的信息填寫及提交,同時這個 h5 頁面也能夠單獨使用。
          而這些用戶信息中就包括 `input`框選擇圖片。
          <input type="file" name="avatar" id="avatar" />
          

          出現了什么問題呢?

          那么問題就出在 input 框這里,點擊這個 input 框,調起 android 手機自帶的拍照和選擇文件的對話框。



          小米手機系統調起

          只要選擇「圖片」或者「拍照」都沒有問題

          問題就出現在選擇「取消」的時候

          出現了問題,需要先解決點擊「取消」程序卡死的問題

          這個問題,這篇文章已經介紹過了

          H5 通過 input 標簽,調起 Android 手機相冊,點擊取消時手機卡住

          如果之前沒有配置過,可以參考配置一下。


          下面說今天的正題,就是點擊取消之后,如果之前頭像內有圖片,那么取消后會把之前的圖片干掉,展示出一個加載錯誤的樣子

          原因找到了:當取消的時候,為了避免卡頓,返回了一個圖片的路徑,但是這個圖片路徑上對應的圖片是不存在的,從而導致了 H5 img 位置 顯示加載失敗



          加載失敗

          那么現在問題就來了:

          如果不返回,就會卡頓;

          如果返回了,就把 img 之前的展示圖片給干掉了

          怎么辦呢?

          我這邊的思路是:

          將原來的 img 標簽內的 src 的內容存儲到本地,然后判斷:如果用戶點擊了取消,那么就將這個原來的 src 內容返回回去

          那么這樣操作的話,就需要知道,如何拿到 img 標簽中的 src 的內容。

          那么實際需要做這么幾部

          1、這個需要和 H5 或者后臺溝通一下,將 H5 中的 這個頭像的 id 唯一,以保證能唯一找到這個頭像。

          2、根據 id 找到這個 img 標簽后,再拿 src 中的內容存儲到本地

          3、判斷用戶點擊取消時,將本地存儲的圖片 src 內容,返回給 H5。

          第三點已經在

          H5 通過 input 標簽,調起 Android 手機相冊,點擊取消時手機卡住

          這個文章中提到過了,找到合適的位置直接返回即可。

          所以本篇文章中的重點就是第一步:根據 id 找到 src 的內容。

          1、創建 addJavascriptInterface 需要的「操作對象」,這個操作對象就是一個類,名字隨便起,不過內部的方法必須添加@JavascriptInterface注解

           //內部類
           final class InJavaScriptLocalObj {
           private static final String TAG = "MainActivity";
           /**
           * @JavascriptInterface 必須要有的哦
           * @param html
           *
           * 一旦檢測到 html 匹配到了要找的元素或者屬性,這里就會調用,否則不會調用這個方法
           */
           @JavascriptInterface
           public void showAvatar(String html) {
           Log.e(TAG, "showAvatar: " + html);
           }
          }
          

          2、配置 webview

           private void initWebView() {
           /**
           * 三項均需配置
           */
           webView.getSettings().setJavaScriptEnabled(true);
           webView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");
           webView.setWebViewClient(new WebViewClient() {
           @Override
           public boolean shouldOverrideUrlLoading(WebView view, String url) {
           webView.loadUrl(url);
           return true;
           }
           @Override
           public void onPageFinished(WebView view, String url) {
           super.onPageFinished(view, url);
           /**
           * ambassador_avatar 是和后臺(h5)商議的唯一的 id
           */
           view.loadUrl("javascript:window.local_obj.showAvatar(document.getElementById('ambassador_avatar').getAttribute('src'));");
           }
           });
          }
          

          那么找元素關鍵的一句,就是

          view.loadUrl("javascript:window.local_obj.showAvatar(document.getElementById('ambassador_avatar').getAttribute('src'));");
          

          備注

          找元素的方法很相似,就是跟 html 中的找 dom 節點一樣

          可以移步到 w3school 逛網看一看

          dom 元素查找方法

          這里小總結一下

           通過 id 查找 HTML 元素
           通過標簽名查找 HTML 元素
           通過類名查找 HTML 元素
           通過 CSS 選擇器查找 HTML 元素
           通過 HTML 對象集合查找 HTML 元素
           var myElement = document.getElementById("intro");//返回單個元素
           var x = document.getElementsByTagName("p");//返回元素列表
           var x = document.getElementsByClassName("intro");//返回元素列表
           var x = document.querySelectorAll("p.intro");//返回元素列表
           var x = document.forms["frm1"];//返回元素列表
          

          返回元素列表的方法在使用是 需要像數組那樣去取得對應的元素,如x[0]

          拿到元素之后,通過 DOM 的文檔,拿到想要的屬性、值等等信息。

          這樣就能通過存儲原來的圖片信息,在點擊取消的時候把信息返回,解決了本次需求的問題。

          謝謝大家的收藏、關注、轉發,持續更新!

          LF4J

          首先映入眼簾的是slf4j,全稱是Simple Logging Facade for Java。從名字可以看出來這是一個日志框架,采用了Facade的設計模式,說白了,這是一個日志框架接口,應用程序里使用slf4j的接口來打印日志,具體的日志框架可以自由選擇,這樣做是為了方便適配不同的日志框架,比如logback,log4j2等。

          官方網站是 http://www.slf4j.org/index.html

          Log4j

          log4j是apache的開源項目,現在已經到2.0版本,所以也叫log4j2,官方網站是

          http://logging.apache.org/log4j/2.x/index.html


          所以本文的日志打印就是通過應用程序里使用slf4j的接口,然后具體的日志框架是log4j2。

          實驗代碼都在上傳在 https://gitee.com/kunpengku/learn-log4j


          添加maven依賴

          首先需要增加對日志框架包的依賴,如下

          <dependencies>
              <!-- 這個依賴是slf4j的api-->
              <dependency>
                  <groupId>org.slf4j</groupId>
                  <artifactId>slf4j-api</artifactId>
                  <version>1.7.28</version>
              </dependency>
              <!--下面這兩個依賴是log4j2的實現-->
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.13.3</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-core</artifactId>
                  <version>2.13.3</version>
              </dependency>
               <!-- 下面這個依賴是 log4j 橋接slf4j用的-->
              <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-slf4j-impl</artifactId>
                  <version>2.13.3</version>
              </dependency>
          </dependencies>

          HelloWorld打印

          import org.slf4j.Logger;
          import org.slf4j.LoggerFactory;
          
          public class LogMain {
          
              static Logger logger = LoggerFactory.getLogger(LogMain.class);
          
              public static void main(String[] args) {
                  logger.error("Hello World");
              }
          
          }

          這就log4j的helloworld,這是還沒有任何的配置文件,這時,log4j會提供一個默認的配置文件,只能輸出到console上,這里要注意,默認配置的Log Level是ERROR的,所以只有ERROR級別及其以上的打印才能輸出看到,如果這里打印一個info的日志,是不會輸出到屏幕的,因為級別太低,過濾掉了。

          輸出

          08:17:18.767 [main] ERROR com.kpk.LogMain - Hello World

          未完待續


          主站蜘蛛池模板: 日韩在线视频不卡一区二区三区| 国产精品一区二区三区99| 国产亚洲日韩一区二区三区| 日韩AV无码一区二区三区不卡毛片 | 国产一区二区三区乱码在线观看| 国产在线精品一区二区夜色| 亚洲爆乳精品无码一区二区| 精品国产亚洲一区二区三区| 午夜无码一区二区三区在线观看| 少妇特黄A一区二区三区| 一区二区三区四区在线播放 | 亚洲AV无码一区二区大桥未久| 国产一区二区视频在线观看| 99国产精品欧美一区二区三区| 亚洲AV无一区二区三区久久| 日韩毛片一区视频免费| 性盈盈影院免费视频观看在线一区| 日本一区二区在线播放| 乱色熟女综合一区二区三区| 国产成人一区二区三区精品久久| 亚洲一区二区三区播放在线| 亚洲AV美女一区二区三区| 亲子乱AV视频一区二区| 精品少妇一区二区三区在线 | 国语精品一区二区三区| 亚洲片一区二区三区| 一区二区三区日本视频| 白丝爆浆18禁一区二区三区 | 亚洲AV成人精品日韩一区| 亚洲色精品VR一区区三区| ...91久久精品一区二区三区| 国产精品视频第一区二区三区 | 国产精品高清一区二区人妖| 99精品一区二区免费视频| 亚洲国产精品一区第二页| 水蜜桃av无码一区二区| 日本免费一区二区三区四区五六区| 国产一区视频在线| 日韩亚洲AV无码一区二区不卡| 久久久久成人精品一区二区| 无码精品人妻一区二区三区中|