繁体   English   中英

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

[英]Stop Umbraco/TinyMce from converting absolute URLs to relative URLs

Umbraco / TinyMce都希望从编辑器中的任何绝对URL中删除基本域。 这是有问题的,因为我有一个RSS feed来抓取我的帖子,然后每周将它们通过电子邮件发送给订阅者。 问题是,图像(和链接,但稍后会担心)如果URL是相对的,则显然将无法工作。

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

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 /,并确保您仅通过https://example.com访问后台。

但是,这将无法正常工作,因为有些内容创建者会使用www,有些则不会。 另外,即使我没有硬编码,而是说如果www是当前域中的内容,而不是在insertImage.js中不是www(反之亦然),那么如果员工A(使用www)转到员工B的旧帖子,最终也会导致问题(不使用www)并重新保存-会将其推回相对网址。

我的问题是:我可以在Umbraco框架中找到直接编辑此问题来源的地方吗?

一种替代方法是使用解析器,正则表达式或子字符串方法。 我也不必担心会保留对Umbraco框架所做的任何更改。

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

      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 pack之类的解析器更好,但是如果我可以用技术上新的1行代码来解决我的问题,则不需要它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM