Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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_Cross Domain_Bookmarklet_Cross Site - Fatal编程技术网

Javascript 通过Bookmarklet跨域发送文本

Javascript 通过Bookmarklet跨域发送文本,javascript,cross-domain,bookmarklet,cross-site,Javascript,Cross Domain,Bookmarklet,Cross Site,我需要一个用户导航到某个页面,该页面有一个充满有用文本的特定div。然后单击MyBookmarklet并将该div中的文本发送回我的服务器,这与当前域不同。我已成功地在书签上插入jQuery,并单击并选择了文本。现在我需要找出一种方法,将该文本跨域发送到我的服务器。我用jQuery尝试了JSONP,但是我的文本对于url来说太长了。我的第二个想法是打开一个新窗口,从我的域加载一个页面,然后以某种方式将所选文本插入新窗口,然后用户可以单击“提交”并将数据发布到我的服务器。由于javascript跨

我需要一个用户导航到某个页面,该页面有一个充满有用文本的特定div。然后单击MyBookmarklet并将该div中的文本发送回我的服务器,这与当前域不同。我已成功地在书签上插入jQuery,并单击并选择了文本。现在我需要找出一种方法,将该文本跨域发送到我的服务器。我用jQuery尝试了JSONP,但是我的文本对于url来说太长了。我的第二个想法是打开一个新窗口,从我的域加载一个页面,然后以某种方式将所选文本插入新窗口,然后用户可以单击“提交”并将数据发布到我的服务器。由于javascript跨站点的原因,这不起作用。有没有人有过这样的经验或想法?谢谢。

生成一个表单(使用DOM)并发布数据(您可能希望以iframe为目标,但它将是fire and forget)。

下面是一个将文本发布到远程服务器的示例。 如果您想更改Iframe上的页面,比如说success,您可以在远程服务器上打印javascript。或者一个弹出窗口说它完成了。在远程服务器上,您可以打印此内容以弹出窗口:

<script> parent.document.getElementById('postmessage').style.display='block'; parent.alert('Successfully posted');</script>
parent.document.getElementById('postmessage').style.display='block';parent.alert(“已成功发布”);
在你想要发送信息的网页上,制作一个表单和Iframe,如下所示

<span id="postmessage" style="display:none">Success Message</span>
<form action="http://www.remoteserver.com/upload_test.php" method="post" target="post_to_iframe">
  <input type="hidden" value="the text to send to remote server" />
  <input type="submit" value="Submit" />
</form>

<!-- When you submit the form it will submit to this iFrame without refreshing the page and it will make the popup and display the message. -->
<iframe name="post_to_iframe" style="width: 600px; height: 500px;"></iframe>
成功消息

使用javascript创建iframe。然后将表单添加到iframe并提交它。表单提交后,将触发onload回调

var i=document.createElement('iframe');
i.setAttribute('name', 'frame-id');
i.setAttribute('id', 'frame-id');
i.setAttribute('allowtransparency', 'true');
i.setAttribute('style', 'border: 0; width: 1px; height: 1px; position: absolute; left: 0; top: 0;');
i.setAttribute('onload', 'iframeFormSubmitted();');

document.body.appendChild(i);

var html = '<html><body>' +
'<form action="/post_url" method="post" id="iframe-form" accept-charset="utf-8">' +
'<input type="hidden" name="id" value="' + your_text + '"/>' +
'</form>' +
'<scr'+"ipt>var e=encodeURIComponent,w=window,d=document,f=d.getElementById('f');" +
"d.getElementById('iframe-form').submit();" +
'</scr'+"ipt></body></html>";

window.frames['frame-id'].document.write(html);
var i=document.createElement('iframe');
i、 setAttribute('name','frame id');
i、 setAttribute('id','frame id');
i、 setAttribute('allowtransparency','true');
i、 setAttribute('style','border:0;宽度:1px;高度:1px;位置:绝对;左侧:0;顶部:0;');
i、 setAttribute('onload','iframeFormSubmitted();');
文件.正文.附件(一);
var html=''+
'' +
'' +
'' +

'您能否更详细地介绍一下如何从服务器以外的域发布表单?表单可以发布到的位置没有限制。仅在可以使用JS读取数据的位置。只需使用表单元素的submit方法,我遇到了一个问题,我试图将文本输入的值设置为一个很长的字符串。这使得服务器返回403禁止的错误。如果我缩短字符串,它将按预期工作。是否仍然可以发送长文本字符串?请修复服务器,使其接受POST数据中的很长字符串。是否可以防止页面重定向到处理POST的php文件?在这种情况下,您仍然可以从服务器获得响应吗?如何将一个iframe作为目标?仅供参考:onload会触发,但是,即使表单以iframe为目标,也无法读取加载的响应。跨域问题。(我只是花了一些时间在这上面…)