1

我创建了一个 jquery 移动表单,并使用 PhoneGap 为平板电脑创建了移动应用程序。当表单完成后,用户点击一个按钮来创建一个 XML。

<div class="_100"><input type="button" id="DownloadButton" onclick="CreateXMLScript()" value="Create XML" /></div>

<div id="generated" style="display:none">
  <h2>SiteVisit.xml</h2>
  <a href="#" id="SaveLink">Save</a> (Right-click and choose <i>Save As...)</i>
  <textarea id="ResultXml" style="width: 100%; height: 300em" readonly="readonly"></textarea>
</div>

JS

$(function () {
$('#DownloadButton').click(update);
});

var template = [
'<?xml version="1.0"?>',
'<SiteVisit xmlns="urn:schemas-microsoft-com:SiteVisit">',
'...',
'<field><?field?></field>',
'...',
 '<field2><?field2?></field2>', 
 '</SiteVisit>'
].join('\r\n'); 

function update() {
var variables = {
'field': $('#field').val(),
'field2': $('#field2').val(),
  };

var newXml = template.replace(/<\?(\w+)\?>/g,
  function(match, name) {
  return variables[name];
  });


$('#ResultXml').val(newXml);
$('#SaveLink')
.attr('href', 'data:text/xml;base64,' + btoa(newXml))
.attr('download', 'SiteVisit.xml');
$('#generated').show();
}

if (!window.btoa) {
btoa = function (input) {
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

var result = '';
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;

do {
  chr1 = input.charCodeAt(i++);
  chr2 = input.charCodeAt(i++);
  chr3 = input.charCodeAt(i++);

  enc1 = chr1 >> 2;
  enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  enc4 = chr3 & 63;

  if (isNaN(chr2)) {
    enc3 = enc4 = 64;
  } else if (isNaN(chr3)) {
    enc4 = 64;
  }

  result += chars.charAt(enc1) + chars.charAt(enc2) + chars.charAt(enc3) + chars.charAt(enc4);
} while (i < input.length);

return result;
};
}

XLM 生成精美,但“SaveLink”函数却没有。当在 android 上使用时(通过按下延长时间),我得到的只是复制或共享两者,它们只捕获表单而不是生成的 XML。我试图将“SaveLink”更改为电子邮件脚本,例如

   function SaveLink()
{
            document.getElementById("ResultXml").action = "mailto:";
            document.getElementById("ResultXml").submit();
}

但没有布埃诺。我收到一封空的电子邮件。我想我需要在这里做点什么

 $('#ResultXml').val(newXml);
 $('#SaveLink')
.attr('href', 'data:text/xml;base64,' + btoa(newXml))
.attr('download', 'SiteVisit.xml');
$('#generated').show();   

但我不知道是什么。对于长期发展的最后一个障碍的任何帮助将不胜感激

4

1 回答 1

0

使用查询字符串参数encodeURIComponent在 XML 字符串上指定 body 参数,然后附加 XML 内容作为其值:

var xmlmail = encodeURIComponent('<?xml version="1.0"?><root><?foo bar baz?></root>');
var jqmail = $("<a>", {"href":"mailto:majordomo@example.com?body="+xmlmail,"text":"Save"});
jqmail.appendTo("body");

参考

于 2014-07-08T16:43:07.867 回答