2010-07-24 60 views
3

我正在为服务构建一个书签。我需要从打开的窗口传输数据(网址,文本),但我不知道哪种方法是最好的。 GET限制了数据量,并且由于跨域问题,ajax是不可能的。带书签的数据传输方法

什么是最佳方式?

回答

7

如果数据量很大,则可以使用POST。使用带有文本框的表单创建隐藏的iframe。将表单方法设置为发布并将操作发送到您的服务。将数据放入文本框中,将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回调,如果你想要的。

+0

工作就像一个魅力,它感觉像解决问题的逻辑方法。谢谢! – jorilallo 2010-07-24 23:21:23

+0

嘿,你会如何让它在新窗口中打开?因为现在对我来说表格提交的很好,但新窗口不存在.... – 2012-12-24 22:37:26

-1

该方法没有建议可行。

解决跨域问题的一种替代方法:您可以托管一个需要大部分JavaScript(包括XHR代码)的JS文件,并且只需使用您的小书签代码将脚本元素插入到当前页面引用的JS文件(换行符增加了可读性,消除他们当然书签代码):

javascript:(function() { 
    var sc = document.createElement("SCRIPT"); 
    sc.type = "text/javascript"; 
    sc.src = "http://domain.com/path/to/script.js"; 
    document.body.appendChild(sc); 
})(); 
0

你可以把你的数据在编码JSON字符串,并与和AJAX POST发送。 AJAX支持POST。