阻止Umbraco / TinyMce将绝对URL转换为相对URL

时间:2015-04-21 15:06:33

标签: javascript url tinymce umbraco

Umbraco / TinyMce都喜欢从编辑器中的任何绝对URL中剥离基本域。这是有问题的,因为我有一个RSS提要抓取我的帖子,并每周通过电子邮件发送给订阅者。问题是,如果他们的网址是相对的,那么图像(和链接,但我后来会担心这一点)显然不会起作用。

到目前为止,我已完成以下工作:

1)添加到tiny_mce_src.js:

convert_urls : false,
relative_urls : false,
remove_script_host : false,   

与那里的相反,对于Umbraco,convert_urls必须设置为false。

使用媒体内容选择器(或内置的HTML编辑器),这将保留所输入的内容(直到保存/发布..)。否则,它会在关闭媒体内容选择器或内置HTML编辑器时删除基本域。

2)下一个问题是内容创建者不想搞乱HTML,所以我需要媒体选择器在选择图片时自动拥有基本域。我在insertImage.js中对此进行了硬编码:

        if (src.substring(0, umbracoPath.length) == umbracoPath) {
            // if the path contains a reference to the umbraco path, it also contains a reference to go up one level (../)
            src = src.substring(umbracoPath.length + 3, src.length);
        }

        var formObj = document.forms[0];
        formObj.src.value = 'https://example.com' + src;

这可以解决所有问题,直到发布和保存为止。基本上,在这个框架的丛林健身房的某个地方,它会抓取当前域和子域(如果适用),如果该域位于富内容编辑器框中(例如在链接或图像href / src中),它将...将其剥离。

要解决此问题,请在上面的insertImage.js代码中使用https:// www .example.com /,并确保只通过{访问后台办公室{3}}

然而,这不会起作用,因为我会有一些使用www的内容创作者和一些不会使用的内容创作者。即使我没有硬编码,而是说如果www在当前域中然后在insertImage.js中不是www(反之亦然),如果员工A(使用www)进入旧帖子,它最终会导致问题员工B做了(不使用www)并重新保存 - 它会将其推回到相对URL。

我的问题是:我在哪里可以查看Umbraco框架直接编辑此问题的来源?

1 个答案:

答案 0 :(得分:0)

另一种方法是使用解析器,正则表达式或子串方法。我也不必担心我会对Umbraco框架做出任何改变。

在我为RSS提要调用此信息的那一刻,我结束时只使用了一个简单的子字符串:

      var bt = node.GetProperty("bodyText").Value
               .Replace("src=\"/","src=\"https://example.com/")
               .Replace("href=\"/","href=\"https://example.com/");                                   
      @Html.Raw(bt);

任何带有正斜杠作为第一个字符的src和href属性都将替换为基本域名。这适用于我的设置,但如果您在博客文章中显示代码,则可能会导致问题。

HTML Agility Pack包这样的解析器更好,但如果我能用技术上的新代码解决我的问题,我就不需要它了。