H5處理支付寶接口返回form

最近H5對接后端從支付寶返回的form准潭。踩了一些坑典尾。
支付寶支付返回的form結(jié)構(gòu)大概是這樣的:

<html>
    <form id="cashierSubmit" accept-charset="UTF-8" name="cashierSubmit" action="***" method="post">
        <input type="hidden" name="orderType" value='' />
        <input type="hidden" name="commodity" value=''
        />
        <input type="hidden" name="merchantCode" value='' />
        <input type="hidden" name="sign" value=''
        />
        <input type="hidden" name="orderAmt" value='' />
        <input type="hidden" name="srcType" value='H5' />
        <input type="hidden" name="expireTime" value='' />
        <input type="hidden" name="feature" value=''
        />
        <input type="hidden" name="outTradeNo" value='' />
        <input type="hidden" name="notifyUrl" value=''
        />
        <input type="hidden" name="signType" value='' />
        <input type="hidden" name="payChannel" value=''
        />
        <input type="hidden" name="returnUrl" value=''
        />
        <input type="hidden" name="notifyInfo" value=''
        />
        <input type="submit" value="提交" style="display:none;">
    </form>
    <script>
        document.forms['cashierSubmit'].submit();
    </script>

</html>

這可以看成是一個完整的html文檔身冀。

  • 第一種解決方案
\\ 假設(shè)result是后端返回的from字符串
const newWindow = window.open('', '_self');
newWindow.document.write(result);
newWindow.focus();

如果是在PC端處理睹耐,這種方式是沒問題的辐赞。但是需要注意三個問題:

  1. window.open()在接口回調(diào)中觸發(fā),可能會被瀏覽器攔截
  2. 如果本身頁面的地址是https的硝训,如果返回的form的action是http的响委,瀏覽器也會彈出安全提示。


    image.png
  3. 微信環(huán)境window.open()不生效
  • 第二種解決方案
    雖然返回的result的form外面有html包裹窖梁,但是我們動態(tài)創(chuàng)建一個div容器赘风,然后將包含<html>的result渲染進去,通過js觸發(fā)form表單提交也是沒問題的纵刘。
const div = document.createElement('formdiv');
div.innerHTML = result;
document.body.appendChild(div);
document.forms['cashierSubmit'].setAttribute('target', '_self');
document.forms['cashierSubmit'].submit();
div.remove();

對于H5來說第二種方案兼容性更好邀窃。
需要注意的是:
一開始我將form的target設(shè)置為了_blank

document.forms['cashierSubmit'].setAttribute('target', '_blank');

導致了在IOS上的瀏覽器(微信環(huán)境,safari假哎,UC)都無法實現(xiàn)form表單的提交瞬捕。
改成_self之后,問題解決舵抹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肪虎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惧蛹,更是在濱河造成了極大的恐慌扇救,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件香嗓,死亡現(xiàn)場離奇詭異迅腔,居然都是意外死亡,警方通過查閱死者的電腦和手機靠娱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門沧烈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人饱岸,你說我怎么就攤上這事掺出。” “怎么了苫费?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵汤锨,是天一觀的道長。 經(jīng)常有香客問我百框,道長闲礼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮柬泽,結(jié)果婚禮上慎菲,老公的妹妹穿的比我還像新娘。我一直安慰自己锨并,他們只是感情好露该,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著第煮,像睡著了一般解幼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包警,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天撵摆,我揣著相機與錄音,去河邊找鬼害晦。 笑死特铝,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的壹瘟。 我是一名探鬼主播鲫剿,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼俐筋!你這毒婦竟也來了牵素?” 一聲冷哼從身側(cè)響起严衬,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤澄者,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后请琳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粱挡,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年俄精,在試婚紗的時候發(fā)現(xiàn)自己被綠了询筏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡竖慧,死狀恐怖嫌套,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情圾旨,我是刑警寧澤踱讨,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站砍的,受9級特大地震影響痹筛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一帚稠、第九天 我趴在偏房一處隱蔽的房頂上張望谣旁。 院中可真熱鬧,春花似錦滋早、人聲如沸榄审。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘟判。三九已至,卻和暖如春角溃,著一層夾襖步出監(jiān)牢的瞬間拷获,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工减细, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匆瓜,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓未蝌,卻偏偏與公主長得像驮吱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子萧吠,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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