2016-04-22 202 views
2

我正在開發一個科爾多瓦混合應用程序(目前爲Android)和使用InAppBrowswer插件。發送請求在科爾多瓦InAppBrowser

我想打開一個網頁,並使用發佈請求在那裏登錄(因爲它目前通過Java在實際的Android應用程序中完成)。

不知何故,這不工作,但我不明白爲什麼。這是我正在使用的代碼:

var ref = cordova.InAppBrowser.open("www.thesite.dummy", "_blank", "location=yes"); 

var postAsString = 'var xhttp = new XMLHttpRequest();'+ 
    'xhttp.open("POST", "'+url+'", true);'+ 
    'xhttp.onreadystatechange = function() {if (xhttp.readyState == 4 && xhttp.status == 200) {alert("it worked")}};'+ 
    'xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");'+ 
    'xhttp.send("username=dummyUser&password=dummyPW")' 
console.log(postAsString); 

ref.executeScript({"code":postAsString}); 

正如你所見,我也console.log我的「postAsString」。如果我複製這個字符串並在www.thesite.dummy的控制檯中執行它,它實際上可行,但不適用於InAppBrwoser

+0

貌似https://stackoverflow.com/questions/37526321/cordova-inappbrowser-post-form-to-url的副本對我來說 – Jannis

+0

將更有意義的稱爲新的重複,但我同意。問題是相同的 – Sergej

回答

1

只是爲了幫助任何通過Google找到此問題的人,解決方案是described at that answer,正如問題中所述註釋。

的代碼,改變值對於特定上下文是下面:

var pageContent = '<html><head></head><body><form id="loginForm" action="www.thesite.dummy" method="post">' + 
'<input type="hidden" name="username" value="dummyUser">' + 
'<input type="hidden" name="password" value="dummyPW">' + 
'</form> <script type="text/javascript">document.getElementById("loginForm").submit();</script></body></html>'; 
var pageContentUrl = 'data:text/html;base64,' + btoa(pageContent); 

var browserRef = window.cordova.InAppBrowser.open(
    pageContentUrl , 
    "_blank", 
    "hidden=no,location=no,clearsessioncache=yes,clearcache=yes" 
);