2017-03-07 20 views
0

我試圖在webview中實時捕獲html表單中的文本輸入。我目前使用jquery捕獲文本輸入更改,然後通過我攔截的URL轉發值。我能夠捕獲文本輸入中的每個更改,但是我遇到的問題是我的文本輸入失去了對輸入的每個新字符的注意力,我不得不重新輸入文本以繼續輸入每次(window.location.href導致它每次觸發時都會失去焦點)。使用下面的代碼林:Swift IOS實時捕獲html表單輸入jquery

var form = " 
<form class="search_extended"> 
<input style="" type="text" name="name" id="search_field"> 
<input type='hidden' name='page' value='name_search'> 
</form>" 

var script = " 
<script type="text/javascript"> 
$(document).ready(function() { 
$("form input, form textarea").on("input propertychange change", function() { 
var search_serialized = $(".search_extended").serialize(); 
window.location.href = "?" + search_serialized; 
});});</script>" 

script = script + "<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>" 

self.webView_Search_Extended.loadHTMLString(form + script, baseURL: nil) 

捕捉轉發URL

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    print(request.url?.absoluteString) 
    var url = request.url?.absoluteString 
return true 
} 

回答

1

我相信你的問題是,通過使用

window.location.href = "?" + search_serialized;

打電話給你的委託捕撈,造成了網址文本字段模糊。

你可能會想使用你的網頁中的特殊鏈接,可以被捕獲(所以沒有捕捉到所有的負載),並從委託返回false此:

var form = " 
<form class="search_extended"> 
<input style="" type="text" name="name" id="search_field"> 
<input type='hidden' name='page' value='name_search'> 
</form>" 

var script = " 
<script type="text/javascript"> 
$(document).ready(function() { 
$("form input, form textarea").on("input propertychange change", function() { 
var search_serialized = $(".search_extended").serialize(); 
window.location.href = "my-form-scheme://" + search_serialized; 
});});</script>" 

script = script + "<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>" 

self.webView_Search_Extended.loadHTMLString(form + script, baseURL: nil) 

再來說代表:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if request.url?.scheme == "my-form-scheme" { 
     print(request.url?.absoluteString) 
     var url = request.url?.absoluteString 
     return false // this is the important bit 
    } 
    return true 
} 

因此,你要確保你只捕獲你的表單事件發佈的特殊url,並返回false,這將有望防止模糊。

+0

你是一個人生的滋味!你知道使用自定義方案背後的原因,爲什麼它不會導致模糊?我有點難以理解它爲什麼這樣工作。 – user2423476

+0

@ user2423476這實際上並不是這裏的定製方案,自定義方案只是讓它很容易捕捉到特定的調用(我不確定是否也許你會從webview調用其他調用,而且它使得更多的答案適用於可能遇到它的任何其他用戶)。在這種條件下,做出不同的是'return false'。當你返回true時,你告訴webview可以加載請求,在這種情況下,重新加載頁面,這又會模糊頁面上的所有輸入。返回false可以讓您捕獲數據,但不會重新加載。 –