2014-03-31 3 views
8

Ich benutze UIWebview in meiner App mit Ladeanforderung von http URL .Webpage geladenen URL ohne Fehler, aber die Schaltfläche mit der Aktion als Java-Skript hat. Problem ist onclick von übergeben nichts passiert und kein Fehler in der Konsole und uiwebview Delegaten auch nicht ausgelöst , einschließlich Fehler delegate.that Button nur wie Bild anzeigen. wo als send button onclick gut in der mobilen Safari App geantwortet hat. unten i Teilansicht Quellcode meiner http urlJavascript funktioniert nicht in UIWebview die Schaltfläche onsubmit, wo als Safari funktioniert gut?

<!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

versuchen mit Safari von '[[UIApplication shared] openURL: [NSURL URLWithString: WebUrl]];' .. und es jetzt überprüfen. ;) – iPatel

+0

einige Fehler in der Konsole? und es gibt nur Formular, fügen Sie bitte Button-Code zur Frage – sage444

+0

@ sage44: Ich habe einige Quelltext-Quelltext für Ihre Referenz hinzugefügt. Ich habe keine Ahnung von HTML und Javascript. So plz lassen Sie mich wissen, wenn Sie mehr Informationen wollen –

Antwort

3

Wenn irgendein Skript einige Arbeit mit Ajax-Request angeschlossen haben wird ausführen, als es nicht direkt von webView Delegatmethoden verfolgt werden können. Damit es funktioniert, müssen Sie dieses Skript in Ihr WebView einfügen. Erstellen eine ajaxHandler.js Datei in Ihrem App-Bundle und fügen Sie diesen Code in er

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(); 
    }; 
} 

, was das Skript zu tun ist, wird es den Ajax-Request in einfaches aus URL-Schema umwandeln, die von unserem webView verfolgt werden kann . Nun, dieses Skript geladen werden in einem globalen String Variablennamen JSHandler aus Bündel in Ihrem viewDidLoad Methode

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

jetzt in dir webViewDidStartLoad: oder webView:shouldStartLoadWithRequest:navigationType Delegatmethode dieses Skript injizieren mit

[_webView stringByEvaluatingJavaScriptFromString:JSHandler]; 

nach dem Skript injizieren wir bereit sind, um die Ajax-Anfragen zu verfolgen. Setzen Sie diese Zeilen in Ihrem webView:shouldStartLoadWithRequest:navigationType Delegatmethode

- (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; 
} 

Hier prüfen wir, ob die Anforderung zur Last fragt Art unseres aus URL-Schema ist myAjaxHandler dann von Laden zu unterbrechen und damit umgehen, wie Sie wollen. Fragen Sie mich, wenn Sie weitere Hilfe benötigen.

Glücklich Codierung :)

Verwandte Themen