Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用bookmarklet进行数据传输的方法_Javascript_Bookmarklet - Fatal编程技术网

Javascript 使用bookmarklet进行数据传输的方法

Javascript 使用bookmarklet进行数据传输的方法,javascript,bookmarklet,Javascript,Bookmarklet,我正在为一项服务构建一个bookmarklet。我需要从打开的窗口传输数据(url、文本),但我不知道哪种方法是最好的。GET限制了数据量,而ajax由于跨域问题而无法实现 最佳方式是什么?如果有大量数据,可以使用POST。使用带有文本框的窗体创建隐藏的iframe。将表单方法设置为post,并将操作设置为您的服务。将数据放入文本框,将iframe附加到文档,然后提交表单 试着这样做: function postData (data, url, cb) { var f =

我正在为一项服务构建一个bookmarklet。我需要从打开的窗口传输数据(url、文本),但我不知道哪种方法是最好的。GET限制了数据量,而ajax由于跨域问题而无法实现


最佳方式是什么?

如果有大量数据,可以使用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);
})();