Editor.md图片跨域问题

问题:

Editor.md 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。

但是,在使用Editor.md的时候配置图片上传时候遇到了一个问题:在图片上传时,出现跨域问题!

Uncaught DOMException: Blocked a frame with origin “http://127.0.0.1:8848” from accessing a cross-origin frame.
at HTMLIFrameElement.uploadIframe.onload (http://127.0.0.1:8848/YLBlog/plugins/image-dialog/image-dialog.js:164:129)

但是,我服务器后台能接收到前端传来的参数

由此证明,图片数据是能传递过来服务器的,但是为什么前端会报跨域问题呢?

首先看一下报错的代码,打开 image-dialog.js:164

uploadIframe.onload = function() {
   

	loading(false);

	var body = (uploadIframe.contentWindow ? uploadIframe.contentWindow : uploadIframe.contentDocument).document.body;
	var json = (body.innerText) ? body.innerText : ( (body.textContent) ? body.textContent : null);

	json = (typeof JSON.parse !== "undefined") ? JSON.parse(json) : eval("(" + json + ")");

	if(!settings.crossDomainUpload)
	{
   
	if (json.success === 1)
	{
   
	dialog.find("[data-url]").val(json.url);
	}
	else
	{
   
	alert(json.message);
	}
	}

	return false;
};

164行的代码是

var body = (uploadIframe.contentWindow ? uploadIframe.contentWindow : uploadIframe.contentDocument).document.body;

第一眼看到这行代码,不知道是获取什么,先把 uploadIframe.contentWindow 和 uploadIframe.contentDocument 这两个打印输出一下,看一下是什么东西,在代码里面加入console.log()代码,再上传图片看看!

由于调用uploadIframe.contentWindow会报跨域错误,所以,只能看到uploadIframe.contentDocument的值为null

所以,无法得到uploadIframe.contentWindow的值,经过一番百度搜索,知道这个值其实就是Editor.md配置的服务器请求接口值

然后,再进一步了解到,image-dialog.js这个文件访问图片上传中的数据造成的跨域问题。

知道了问题所在,就好办了,开始分析源码。

在该函数的接下一行:会调用该函数

dialog.find("[type=\"submit\"]").bind("click", submitHandler).trigger("click");

首先,是寻找一个type类型是submit提交的元素,然后绑定事件click点击调用submitHandler函数

我们来输出一下,这行代码找到的sunmit的元素是什么:

console.log(dialog.find("[type=\"submit\"]"));

得到一

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值