2014-03-31 73 views
8

我在我的應用程序中使用UIWebView加載請求的http url.Webpage加載url沒有失敗,但其中有作爲java script.problem onclick提交的按鈕沒有任何反應,沒有錯誤在控制檯和uiwebview委託也沒有被解僱,包括錯誤委託。這些按鈕就像圖像視圖一樣。作爲提交按鈕onclick在移動Safari瀏覽器應用程序中做出了很好的迴應。下面我附上我的HTTP URLJavaScript不工作在UIWebview的按鈕onsubmit作爲Safari瀏覽器正常工作?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1"><link href="/App_Themes/Common.css" rel="Stylesheet" type="text/css" /> 
    <script src="/Script/siteCommon.js" type="text/javascript" ></script> 


<link href="../../App_Themes/default/style.css" type="text/css" rel="stylesheet" /><title> 
    Change Password 
</title></head> 
<body> 
    <form method="post" action="10470" onsubmit="javascript:return WebForm_OnSubmit();" id="form1"> 
<div class="aspNetHidden"> 
<input type="hidden" name="_TSM_HiddenField_" id="_TSM_HiddenField_" value="2GFwlGU9ATlFIxrdsXRzcja58_1t5F8HSleaZM4ZQwk1" /> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE5NDU5NTY1MjYPZBYCZg9kFgICAw9kFgICBw9kFggCAw9kFgICAQ8WAh4EVGV4dAXPAVBsZWFzZSBwcm92aWRlIHRoZSBlbWFpbCBhZGRyZXNzIHlvdSB1c2VkIHRvIHJlZ2lzdGVyIHlvdXIgYWNjb3VudCBhbG9uZyB3aXRoIHlvdXIgY3VycmVudCBwYXNzd29yZC4gIFdoZW4gY2hhbmdpbmcgeW91ciBwYXNzd29yZCwgcGxlYXNlIGJlIHN1cmUgdG8gZm9sbG93IHRoZSBwYXNzd29yZCBydWxlcyBzZXQgZm9ydGggYnkgeW91ciBhZG1pbmlzdHJhdG9yLmQCBQ9kFgICAQ8PFgIfAAUORW1haWwgQWRkcmVzczpkZAIHD2QWBmYPZBYCAgEPDxYCHwAFDU9sZCBQYXNzd29yZDpkZAICDw8WAh8ABQlQYXNzd29yZDpkZAIHDw8WAh8ABRFDb25maXJtIFBhc3N3b3JkOmRkAgkPZBYEAgEPDxYEHwAFDlJlc2V0IFBhc3N3b3JkHgdWaXNpYmxlaGRkAgIPDxYEHwAFBlN1Ym1pdB8BZ2RkZKpTQvPJfWmJqFvdHZIrXesCKRnEIKkDGkSgeZv0B58z" /> 
</div> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['form1']; 
if (!theForm) { 
    theForm = document.form1; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 


<script src="/WebResource.axd?d=0yNOlELC71f7MU1kDN0EjQ2&amp;t=635152212760076874" type="text/javascript"></script> 


<script src="/ScriptResource.axd?d=c93c_YnvR2d5xbofY3U48Vv2IRMVoKIPk_hrlJ8-C5LxDZb6nfS51RYyYBFDJDWwblnlsXZ0-KwhxpojwLpoQQ2&amp;t=1e961a8d" type="text/javascript"></script> 
<script src="/ScriptResource.axd?d=CBZ_3hbD_tfINaKqOHxpx7JALH5uYYEO3oWKa0RYfcnTbdSBTlY7W2hGWTKE5diJ0&amp;t=ffffffff81f1a403" type="text/javascript"></script> 
<script src="/ScriptResource.axd?d=CBZ_3hbD_tfINaKqOHxpx7JALH5uYYEO3oWKa0RYfcmlwqDqfxGdA2J9XRFKE5rz0&amp;t=ffffffff81f1a403" type="text/javascript"></script> 
<script src="/actions/password/10470?_TSM_CombinedScripts_=True&amp;v=2GFwlGU9ATlFIxrdsXRzcja58_1t5F8HSleaZM4ZQwk1&amp;_TSM_Bundles_=&amp;cdn=False" type="text/javascript"></script> 
<script src="/ScriptResource.axd?d=CBZ_3hbD_tfINaKqOHxpxwkS3UqxfzxcZj62hGX0hvK9oQFljrnoDHbkkd4RNQkVAwNoEXOsrlyOHfAU-XrwAw2&amp;t=ffffffff81f1a403" type="text/javascript"></script> 
<script src="/ScriptResource.axd?d=CBZ_3hbD_tfINaKqOHxpxyqbdySWicIlJxGXGKbjz5V_OOL5bgqUM-2ewmqJqIBS_FJCzNDx5yt8EYyx12l3wQ2&amp;t=ffffffff81f1a403" type="text/javascript"></script> 
<script type="text/javascript"> 
//<![CDATA[ 
function WebForm_OnSubmit() { 
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false; 
return true; 
} 
//]]> 
</script> 
+0

通過'[[UIApplication的sharedApplication]的OpenURL:[NSURL URLWithString:WEBURL]與野生動物園嘗試;'..現在檢查。 ;) – iPatel

+0

在控制檯中的一些錯誤?並且只有表單,請將按鈕代碼添加到問題 – sage444

+0

@ sage44:我已經添加了來自viewsource文件的幾個代碼以供您參考.i對html和javascript沒有任何意見。所以PLZ讓我知道如果你想更多的信息 –

回答

3

的局部視圖源代碼。如果任何腳本將要執行使用比它不能直接由web視圖委託方法跟蹤AJAX請求一些工作。爲了使它工作,你必須在你的webView中注入這個腳本。 在您的應用程序包創建一個ajaxHandler.js文件並粘貼此代碼裏面

if(!s_ajaxListener){ 

    var s_ajaxListener = new Object(); 
    s_ajaxListener.tempOpen = XMLHttpRequest.prototype.open; 
    s_ajaxListener.tempSend = XMLHttpRequest.prototype.send; 
    s_ajaxListener.callback = function() { 
     window.location='myAjaxHandler://' + this.url; 
    }; 

    XMLHttpRequest.prototype.open = function(a,b) { 
     if (!a) var a=''; 
     if (!b) var b=''; 
     s_ajaxListener.tempOpen.apply(this, arguments); 
     s_ajaxListener.method = a; 
     s_ajaxListener.url = b; 
     if (a.toLowerCase() == 'get') { 
      s_ajaxListener.data = b.split('?'); 
      s_ajaxListener.data = s_ajaxListener.data[1]; 
     } 
    }; 

    XMLHttpRequest.prototype.send = function(a,b) { 
     if (!a) var a=''; 
     if (!b) var b=''; 

     s_ajaxListener.tempSend.apply(this, arguments); 
     if(s_ajaxListener.method.toLowerCase() == 'post')s_ajaxListener.data = a; 
     s_ajaxListener.callback(); 
    }; 
} 

這是什麼腳本將做的是,它會轉換Ajax請求成簡單的由URL方案,可以通過我們的web視圖追蹤。現在,在一個全局字符串變量名JSHandler從包中加載該腳本您viewDidLoad方法

JSHandler = [[NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"ajaxHandler" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil] retain]; 

現在注入的腳本中,我們已經準備好後,你內心webViewDidStartLoad:webView:shouldStartLoadWithRequest:navigationType委託方法注射用

[_webView stringByEvaluatingJavaScriptFromString:JSHandler]; 

這個腳本中跟蹤ajax請求。把這些線你webView:shouldStartLoadWithRequest:navigationType委託方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([[[request URL] scheme] isEqual:@"myAjaxHandler"]) { 
     NSString *requestedURLString = [[[request URL] absoluteString] substringFromIndex:[CocoaJSHandler length] + 3]; 

     NSLog(@"ajax request: %@", requestedURLString); 
     return NO; 
    } 

    return YES; 
} 

在這裏,我們檢查,如果要求負載的要求就是我們由URL方案myAjaxHandler的類型,然後加載中斷它,只要你想處理它裏面。 問我是否需要進一步的幫助。

編碼愉快:)

相關問題