swift與js特殊需求交互

var webview = UIWebView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: webviewHeight))
webview.delegate = self
webview.scrollView.bounces = false
webview.loadRequest(NSURLRequest(URL: NSURL(string: _url)!))
self.view.addSubview(webview)

1.swift調(diào)用js

func webViewDidFinishLoad(webView: UIWebView) {
  self.webview.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight")//正常獲取網(wǎng)頁內(nèi)容長度的方法
}

2.js調(diào)用swift

客戶端定義好方法,并且與服務端約定好協(xié)議 scheme+host+query
如:myapp://refresh?type=1&data=2

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
  guard let url = request.URL else{
            return true
  }
  guard url.scheme == "myapp"{
    return true
  } 
  guard let action == url.host else{
    return true
  }
  let parStr = url.query ?? ""
  handleAction(action, par: par)
  return true
}
func handleAction(action:String,par:String){
   if action == " refresh"{
        let parDict = par.toURLParameterDict()
        let type = parDict["type"] as! Int
        let data = parDict["data"] as! String 
        if type == 1{
          refreshView(data)
        }
    }
}
//執(zhí)行原生事件
func refreshView(data:Int){
  //handleData
    ...
    self.tableView.reloadData()
}
//解析URL參數(shù)轉(zhuǎn)換成Dictionary
extension String{
    func toURLParameterDict()->NSDictionary{
        guard !self.isEmpty{
          return NSDictionary()
        }
        let dict = NSMutableDictionary()
        let arr = self.componentsSeparatedByString("&")
        for one in arr{
            let pararr = one.componentsSeparatedByString("=")
            let key = pararr.first!
            let value = pararr.last!
            dict[key] = value
        }
        
        return NSDictionary(dictionary: dict)
    }
}
    

3.處理js中ajax加載完后cell內(nèi)容自適應(webview在tableView中的情況)

**方法1:通過kov監(jiān)聽webview的ajax加載完成的屬性,來重新獲取webview內(nèi)容高度

//TODO:理論是可實現(xiàn)的,后續(xù)添加

**方法2:通過js調(diào)用原生告知ajax加載完成
myapp://common.loadfinish

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
  guard let url = request.URL else{
            return true
  }
  guard url.scheme == "myapp"{
    return true
  } 
  guard let action == url.host else{
    return true
  }
  if action = "common.loadfinish"{
    let newHeight = CGFloat(Float(webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight")!)!)
  ...
  //reloadTableView
  }

4.處理h5中的webp圖片不顯示

google:
1.get webp image url ;
2.download image ;
3.use base64 library ,embed same data with <img src> tag.
**思路:

<1>獲取html中所有的圖片

<2>如果是webp圖片需要替換成base64數(shù)據(jù)

<3>將新的圖片數(shù)據(jù)寫入html標簽中

@T7S{[6TF}64]OD3W`KAJ53.jpg
func webViewDidFinishLoad(webView: UIWebView) {
  guard let oldimgurl = webView.stringByEvaluatingJavaScriptFromString("function getlist (){var imglist='';$.each($('#news-article img'), function(i){if (i == 0){imglist = $(this).attr('src')}else{imglist =  imglist+','+$(this).attr('src')}});return imglist;} getlist();") else{
  return
  }
  let imageurllist = oldimgurl.toImgArr()  
   var imgliststr = ""
    for i in 0..<imageurllist.count{
      var reaultstr = ""
      if i != 0{
        reaultstr+=","
      }
      let defaultimgstr = UIImagePNGRepresentation(defaultImg!)!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength).encodeToURL()
      guard let url = NSURL(string:imageurllist[i]) else{
        reaultstr+=defaultimgstr
        imgliststr+=reaultstr
        return
      }
      guard let data = NSData(contentsOfURL: url) else{
        reaultstr+=defaultimgstr
        imgliststr+=reaultstr
        return
      }
      if data.isWebP(){
        let img = UIImage(webPData: data)
        guard let pngdata = UIImagePNGRepresentation(img) else{
          reaultstr+=defaultimgstr
          imgliststr+=reaultstr
          return 
        }
        let base64str = pngdata.base64EncodedStringWithOptions(.Encoding64CharacterLineLength).encodeToURL()
        reaultstr+=base64str
        imgliststr+=reaultstr
       }else{
        reaultstr+=imageurllist[i]
        imgliststr+=reaultstr
       }
      }
  webView.stringByEvaluatingJavaScriptFromString("function setlist(){var imglist = '\(imgliststr)';var imglist_arr = imglist.split(',');$.each($('#news-article img'), function(i) {if(imglist_arr[i].indexOf('http')>=0){$(this).attr('src', imglist_arr[i]);}else{$(this).attr('src', 'data:image/png;base64,' + imglist_arr[i]);}});}setlist();")
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昔善,一起剝皮案震驚了整個濱河市晾捏,隨后出現(xiàn)的幾起案子耕挨,更是在濱河造成了極大的恐慌拥娄,老刑警劉巖耸弄,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迄靠,死亡現(xiàn)場離奇詭異秒咨,居然都是意外死亡,警方通過查閱死者的電腦和手機掌挚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門雨席,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人疫诽,你說我怎么就攤上這事舅世。” “怎么了奇徒?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵雏亚,是天一觀的道長。 經(jīng)常有香客問我摩钙,道長罢低,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任胖笛,我火速辦了婚禮网持,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘长踊。我一直安慰自己功舀,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布身弊。 她就那樣靜靜地躺著辟汰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阱佛。 梳的紋絲不亂的頭發(fā)上帖汞,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音凑术,去河邊找鬼翩蘸。 笑死,一個胖子當著我的面吹牛淮逊,可吹牛的內(nèi)容都是我干的催首。 我是一名探鬼主播扶踊,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翅帜!你這毒婦竟也來了姻檀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤涝滴,失蹤者是張志新(化名)和其女友劉穎绣版,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歼疮,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡杂抽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了韩脏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缩麸。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赡矢,靈堂內(nèi)的尸體忽然破棺而出杭朱,到底是詐尸還是另有隱情,我是刑警寧澤吹散,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布弧械,位于F島的核電站,受9級特大地震影響空民,放射性物質(zhì)發(fā)生泄漏刃唐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一界轩、第九天 我趴在偏房一處隱蔽的房頂上張望画饥。 院中可真熱鬧,春花似錦浊猾、人聲如沸抖甘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衔彻。三九已至,卻和暖如春幅疼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昼接。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工爽篷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慢睡。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓逐工,卻偏偏與公主長得像铡溪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泪喊,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容