一种利用书签传输数据的方法

发布于 2024-09-11 06:21:56 字数 107 浏览 4 评论 0原文

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

最佳方式是什么?

I'm building a bookmarklet for a service. I need to transfer data (url, text) from open window but I don't know which would be the best method. GET limits the amount of data and ajax isn't possible due cross-domain problem.

What would be the optimal way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

话少情深 2024-09-18 06:21:57

如果数据量很大,可以使用 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。

You could use POST if it's a lot of data. Create a hidden iframe with a form with a textbox. Set the form method to post and the action to your service. Put the data into the textbox, attach the iframe to the document, and submit the form.

Try something like this:

  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();
  }

You can remove the iframe from the document in the callback if you want.

阿楠 2024-09-18 06:21:57

您可以将数据放入编码的 JSON 字符串中并使用 AJAX POST 发送。 AJAX 支持 POST。

You can put your data in an encoded JSON string and send it with and AJAX POST. AJAX support POST.

紫南 2024-09-18 06:21:57

没有推荐的方法会起作用。

另一种解决跨域问题的方法是:您可以托管一个包含大部分所需 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);
})();

The method no recommends would work.

An alternate method, to get around the cross-domain issue: you can host a JS file with a majority of the JavaScript required (including the XHR code), and simply use your bookmarklet code to inject a script element into the current page referencing your JS file (line-breaks added for readability; remove them in the bookmarklet code of course):

javascript:(function() {
    var sc = document.createElement("SCRIPT");
    sc.type = "text/javascript";
    sc.src = "http://domain.com/path/to/script.js";
    document.body.appendChild(sc);
})();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文