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

クエリ文字列パラメーターを使用して XML 文字列の body パラメーターを指定しencodeURIComponent、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 に答える