Javascript 使用bookmarklet进行数据传输的方法
我正在为一项服务构建一个bookmarklet。我需要从打开的窗口传输数据(url、文本),但我不知道哪种方法是最好的。GET限制了数据量,而ajax由于跨域问题而无法实现Javascript 使用bookmarklet进行数据传输的方法,javascript,bookmarklet,Javascript,Bookmarklet,我正在为一项服务构建一个bookmarklet。我需要从打开的窗口传输数据(url、文本),但我不知道哪种方法是最好的。GET限制了数据量,而ajax由于跨域问题而无法实现 最佳方式是什么?如果有大量数据,可以使用POST。使用带有文本框的窗体创建隐藏的iframe。将表单方法设置为post,并将操作设置为您的服务。将数据放入文本框,将iframe附加到文档,然后提交表单 试着这样做: function postData (data, url, cb) { var f =
最佳方式是什么?如果有大量数据,可以使用POST。使用带有文本框的窗体创建隐藏的iframe。将表单方法设置为post,并将操作设置为您的服务。将数据放入文本框,将iframe附加到文档,然后提交表单 试着这样做:
function postData (data, url, cb) {
var f = document.createElement('iframe'),
fname = (+((''+Math.random()).substring(2))).toString(36);
f.setAttribute('name', fname);
f.setAttribute('id', fname);
f.setAttribute('style', 'width:0;height:0;border:none;margin:none;padding:none;position:absolute;');
document.body.appendChild(f);
var frame = window.frames[fname],
doc = frame.document,
form = doc.createElement('form'),
text = doc.createElement('textarea');
text.setAttribute('name', 'data');
text.appendChild(doc.createTextNode(data));
form.setAttribute('action', url);
form.setAttribute('method', 'post');
form.appendChild(text);
doc.body.appendChild(form);
if (cb) { document.getElementById(fname).onload=cb; }
doc.forms[0].submit();
}
如果需要,您可以从回调中的文档中删除iframe。no建议的方法将起作用 另一种解决跨域问题的方法是:您可以使用所需的大部分JavaScript(包括XHR代码)托管一个JS文件,只需使用bookmarklet代码将脚本元素注入引用JS文件的当前页面(为可读性添加了换行符;当然,在bookmarklet代码中删除它们):
您可以将数据放入编码的JSON字符串中,并使用和AJAX POST发送数据。AJAX支持帖子。工作起来很有魅力,感觉是解决问题的一种合乎逻辑的方式。谢谢嘿,那你怎么在新窗口打开它呢?因为现在对我来说表单提交很好,但是新窗口不在那里。。。。
javascript:(function() {
var sc = document.createElement("SCRIPT");
sc.type = "text/javascript";
sc.src = "http://domain.com/path/to/script.js";
document.body.appendChild(sc);
})();