Можете ли вы использовать JavaScript, чтобы найти URL-адреса изображений, а затем передать эту информацию в Coldfusion? - PullRequest
0 голосов
/ 26 декабря 2011

Можете ли вы использовать javascript, чтобы найти URL-адреса изображений, а затем передать эту информацию в coldfusion и не использовать regx внутри CF или JS?

мне кажется, что firefly может найти все URL-адреса get image во вкладке net просто отлично, и DOM понимает, что такое объект изображения или ссылка на изображение.

Могу ли я получить доступ к этой стопке информации, уже отсортированной в другом месте.

Код, который создает изображения, выглядит как e = new L (f || "// chart.googleapis.com/chart"); а также можно найти на http://www.google.com/finance?q=NASDAQ:SQNM&fstype=ii.

Цель состоит в том, чтобы использовать эти диаграммы для быстрого ознакомления по номеру http://www.investingNideas.com

Мои старые методы ожидания - cfhttp и два регулярных выражения

script = REMatchNoCase ('] > [^ <] </em>', objGet.FileContent) /> // получает сценарии

finance = REMatchNoCase ('] +>. +?', ObjGet.FileContent) /> // получает div

Я смотрел на отражение javascript или отражение внутри iframe.

спасибо

1 Ответ

1 голос
/ 27 декабря 2011

Я проверил это, и оно работает.Надеюсь, мое понимание «работы» такое же, как и ваше.Здесь есть несколько хитростей, потому что изображения, к которым вам нужно получить доступ, создаются при помощи рендеринга javascript в браузере, поэтому соскребание экрана на стороне сервера будет недостаточным (если вещи не станут действительно сложными, и я не буду там).Кроме того, все сложно, поскольку загружаемый вами контент находится в удаленном домене (www.google.com), а это означает, что существуют ограничения на то, как вы можете получить доступ к этому контенту в браузере (на самом деле это невозможно сделать через Ajax без надлежащегоЗаголовки Access-Control-Allow-Origin на сервере Google; невозможно получить к нему доступ, встроив прямой iframe для аналогичных ограничений, предотвращающих междоменную манипуляцию DOM).Итак, мне пришлось обойти оба этих ограничения.Одно замечание - я понимаю, что вы не просили jQuery, но, честно говоря, здесь стало намного проще, и я воспользовался им.Итак, вот как я это получил:

index.cfm

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(function () {
        $("#googleFrame").load(function () { // bind to the load event, so we'll know that the embedded resources will all have finished rendering (including the images we're after)

                // this will simply include the images from google on the current page
                $("#rippedGoogleImages")
                   .html('') // remove the loading message
                   .append($(this).contents().find("img.goog-serverchart-image")); // pull the loaded images out of the frame

                // if you just want to see the URLs of those images:
                /* $(this).contents().find("img.goog-serverchart-image").each(function (){
                    console.log($(this).attr('src'));
                });
                */

        });
        $("#googleFrame").attr("src", "googleProxy.cfm"); // trickiness that will become clear below
});
</script>

<iframe id="googleFrame" style="display:none"></iframe><!-- hidden iframe -->

<h1>Finance Images</h1>

<div id="rippedGoogleImages">
Loading Images From Google...
</div>

И ключ, который позволяет нам обойти ограничения между доменами, файл, который выполняет прямой запрос в Google насервер: googleProxy.cfm:

<cfhttp url="http://www.google.com/finance?q=NASDAQ:SQNM&fstype=ii">

<cfoutput>
#cfhttp.filecontent#
</cfoutput>
<!--- The next line injects the necessary base href to allow the resources (js, css, images, etc...) to resolve correctly when served from this new location --->
<cfhtmlhead text="<base href='http://www.google.com/finance/'>">

Все выполнено без неприятной очистки экрана или регулярных выражений на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...