Привет всем) Мне нужно получить все ссылки из документа Google. Я нашел такой общий подход:
function getAllLinks(element) {
var links = [];
element = element || DocumentApp.getActiveDocument().getBody();
if (element.getType() === DocumentApp.ElementType.TEXT) {
var textObj = element.editAsText();
var text = element.getText();
Logger.log("text " + text);
var inUrl = false;
for (var ch=0; ch < text.length; ch++) {
var url = textObj.getLinkUrl(ch);
if (url != null) {
if (!inUrl) {
// We are now!
inUrl = true;
var curUrl = {};
curUrl.element = element;
curUrl.url = String( url ); // grab a copy
curUrl.startOffset = ch;
}
else {
curUrl.endOffsetInclusive = ch;
}
}
else {
if (inUrl) {
// Not any more, we're not.
inUrl = false;
links.push(curUrl); // add to links
curUrl = {};
}
}
}
}
else {
var numChildren = element.getNumChildren();
for (var i=0; i<numChildren; i++) {
links = links.concat(getAllLinks(element.getChild(i)));
}
}
Logger.log(links);
}
Он прекрасно работает, если я, например, введите URL-адрес в тексте, но если добавить ссылку через меню («Вставить» -> «Ссылка»), это не так работа, функция getLinkUrl()
возвращает null
. Документация содержит информацию о Link классе, я думал, что все ссылки представлены им, но не понимаю, почему я не могу вставить ссылку через меню.
Я подумал, что могу использовать некоторые регулярное выражение в тексте элемента документа, но если я добавляю ссылку через пункт меню, я могу указать собственную метку для ссылки, которая может не содержать URL-адреса.
Кто-нибудь сталкивался с таким сценарием? Что я пропустил?