Обратная Находка в строке

Многие сайты используют AJAX для динамического добавления / отображения / изменения контента. Иногда он используется вместо навигации по сайту, поэтому текущий URL-адрес изменяется программно, а сценарии содержимого в этом случае автоматически не выполняются браузером, так как страница не извлекается с удаленного сервера целиком.


Обычные JS-методы обнаружения изменений страницы, доступные в сценарии контента .


Специфические расширения: обнаружение изменений URL на странице background / .

Для работы с навигацией существует расширенный API: webNavigation , webRequest , но мы будем использовать простой chrome.tabs.onUpdated прослушиватель событий, который посылает сообщение к скрипту содержимого:

  • manifest.json: declare background / event page объявить скрипт содержимого добавить "tabs" разрешено .
  • background.js
    var rxLookfor = /^https?:\/\/(www\.)?google\.(com|\w\w(\.\w\w)?)\/.*?[?#&]q=/;
    chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
        if (rxLookfor.test(changeInfo.url)) {
            chrome.tabs.sendMessage(tabId, 'url-update');
        }
    });
    
  • content.js
    chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
        if (msg === 'url-update') {
            doSomething();
        }
    });
    

8
задан Mathias Müller 21 March 2014 в 16:05
поделиться

4 ответа

Следующее является примером шаблона, который произвел бы необходимый вывод в XSLT 1.0:

<xsl:template name="getExtension">
<xsl:param name="filename"/>

  <xsl:choose>
    <xsl:when test="contains($filename, '.')">
    <xsl:call-template name="getExtension">
      <xsl:with-param name="filename" select="substring-after($filename, '.')"/>
    </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$filename"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="/">
    <xsl:call-template name="getExtension">
        <xsl:with-param name="filename" select="'http://www.blah.com/path/to/file/media.jpg'"/>
    </xsl:call-template>
</xsl:template>
14
ответ дан 5 December 2019 в 09:27
поделиться

При использовании XSLT 2.0 это легко:

 <xsl:variable name="extension" select="tokenize($filename, '\.')[last()]"/>

Если Вы не, это немного более твердо. Из Поваренной книги O'Reilly XSLT существует хороший пример. Поиск "Маркирования Строки".

Я полагаю, что существует также функция EXSLT, если Вы имеете это в наличии.

4
ответ дан 5 December 2019 в 09:27
поделиться

Как насчет маркируют с "/" и берут последний элемент от массива?

Example: tokenize("XPath is fun", "\s+")
Result: ("XPath", "is", "fun")

Был скрипач XSLT когда-то назад... потерянной связью теперь. Но HTH

0
ответ дан 5 December 2019 в 09:27
поделиться

Для ссылки эту проблему обычно называют "подстрокой-после-последнего" в XSLT.

0
ответ дан 5 December 2019 в 09:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: