Вообщем замучался я с авторизацией и решил пойти другим путем. Решил пусть скрипт работает только на странице нужного мне сайта когда я авторизирован. Но мне надо выводить на любой странице инфу, которая находится по определенной ссылке. Сделал так:
onClick: function(event) { var link = window.content.document.getElementsByTagName('a')[1]; window.content.document.getElementsByClassName("row2")[1].innerHTML='<iframe id="iframe_1" name="iframe_1" style="margin:0;width:100%;" frameborder="0" height="30" src="'+link+'"></iframe>'; var frame = document.getElementById("iframe_1"); console.log(frame.contentDocument.body.innerHTML); } Мне нужно со страницы, которая находится по адресу "линк", спарсить некоторую инфу. Но таким образом во фрейм я вывожу всю страницу целиком. И еще она ведь загружается не сразу. Пытаюсь ее искать, но скрипт выполняется сразу, а ведь она еще не успела загрузиться. Или возможно есть способ загрузить не всю ссылку, а только часть ее во фрейм? З.Ы. Решил сделать немного иначе: window.content.document.getElementsByClassName("row2")[1].innerHTML='<iframe id="iframe_1" name="iframe_1" style="margin:0;width:100%;" frameborder="0" height="30" src="'+link+'" onload="this.src=\'javascript: {alert(1);}\'"></iframe>'; Тоесть я скрипт обработки встраиваю прямо в создаваемый мною фрейм. Алерт срабатывает. Но тут я сталкиваюсь с другой проблемой. Когда я пытаюсь работать работать со страницей, меня начинают парить скобки!! window.content.document.getElementsByClassName("row2")[1].innerHTML='<iframe id="iframe_1" name="iframe_1" style="margin:0;width:100%;" frameborder="0" height="30" src="'+link+'" onload="this.src=\'javascript: {alert(document.getElementsByTagName("li").length);}\'"></iframe>'; Получается что перед li скобка как бы закрывается. Экранирование обратным слешем в данном случае не подходит, выдает ошибку. Точно так же не получилось у меня ничего с комбинированием одинарных и двойных скобок( |
Torero,
если ты авторизован на сайте, то можешь просто загружать строку через Request, безо всяких iframe. по идее, Request должен передать все куки. |
Да, но мне надо чтобы данные на странице оставались те же. Вот сижу я на сайте и делами занимаюсь. Надо чтобы скрипт не мешал мне работать, но при этом при появлении нового сообщения я сразу же о нем узнавал. Но я этот вопрос уже решил методом тыка.
var Widget = require("widget").Widget; var tabs = require('tabs'); var wuntils = require('sdk/window/utils'); var window = wuntils.getMostRecentBrowserWindow(); var document = window.document; exports.main = function() { // Widget documentation: [url]https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html[/url] new Widget({ id: "my-widget-1", label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/favicon.ico", // Add a function to trigger when the Widget is clicked. onClick: function(event) { window.alert("Work"); var link = window.content.document.getElementsByTagName('a')[1]; window.content.document.getElementsByClassName("row2")[1].innerHTML='\ <iframe id="iframe_1" name="iframe_1" \ style="margin:0;width:100%;" frameborder="0" height="0" src="'+link+'" onload=" \ var text = window.content.document.getElementById(\'iframe_1\').contentDocument.body.innerHTML;\ re = /поступило <b>+[0-9]*/im; \ var buff = text.match(re);\ re = /[0-9]/; \ var ans = buff[0].match(re);\ alert(\'поступило \'+ans+\' сообщений!\');\ "\ </iframe>'; } }); }; Теперь по клику на иконку виджета у меня выскакивает алерт с количеством непрочитанных сообщений. Правда регулярка заработала только в таком виде, так что если количество сообщений будет больше 10ти то выдаст только цифру 1 и т.д. Но ладно, дело не в том. Как теперь сделать, чтобы функция загрузки фрейма и проверки его содержимого запускалась сама, без нажатия на иконку виджета, раз в n секунд?? Весь вечер промучился с таймерами, так ничего и не получилось(( |
Цитата:
с регексами элементарно: var ans = (/поступило\s+<b>(\d*)/.test(text) ? RegExp.$1 : "0"); с таймерами тоже просто: // таймер с интервалом в 1 мин (60000 мкс) setInterval(function() { // тут все действия - загрузка html через Request и добыча числа регексом. }, 60000); |
За регулярку спасибо. А с Request действительно затруднения. На залогиненном сайте (тот же ВК) действительно все загружается без проблем. А на этом вот все время вместо любой страницы я получаю страницу авторизации. К тому же, кириллица не отображается при таком подходе, что серьезно затрудняет поиск нужного числа. А таймеры я так и пробовал делать. Если запилить вот так:
var Widget = require("widget").Widget; var tabs = require('tabs'); var wuntils = require('sdk/window/utils'); var window = wuntils.getMostRecentBrowserWindow(); var document = window.document; exports.main = function() { // Widget documentation: [url]https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html[/url] new Widget({ id: "my-widget-1", label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/favicon.ico", // Add a function to trigger when the Widget is clicked. setInterval( function(event) { window.alert("Work"); var link = window.content.document.getElementsByTagName('a')[1]; window.content.document.getElementsByClassName("row2")[1].innerHTML='\ <iframe id="iframe_1" name="iframe_1" \ style="margin:0;width:100%;" frameborder="0" height="0" src="'+link+'" onload=" \ var text = window.content.document.getElementById(\'iframe_1\').contentDocument.body.innerHTML;\ re = /поступило <b>+[0-9]*/im; \ var buff = text.match(re);\ re = /[0-9]/; \ var ans = buff[0].match(re);\ alert(\'поступило \'+ans+\' сообщений!\');\ "\ </iframe>'; }, 1000); }); }; То в логе ошибок я вижу "missing : after property id". Пытался обьявление функции вывести в самый первый блок, потом сразу за скобки нью виджета, потом вообще в самый конец.. Работает только вариант с предыдущего поста, срабатывающий по клику на виджет( |
попробуй так
var Widget = require("widget").Widget; var tabs = require('tabs'); var wuntils = require('sdk/window/utils'); var window = wuntils.getMostRecentBrowserWindow(); var document = window.document; exports.main = function() { // Widget documentation: [url]https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html[/url] new Widget({ id: "my-widget-1", label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/favicon.ico" }); setInterval( function() { window.alert("Work"); var link = window.content.document.getElementsByTagName('a')[1]; window.content.document.getElementsByClassName("row2")[1].innerHTML='\ <iframe id="iframe_1" name="iframe_1" \ style="margin:0;width:100%;" frameborder="0" height="0" src="'+link+'" onload=" \ var text = window.content.document.getElementById(\'iframe_1\').contentDocument.body.innerHTML;\ re = /поступило <b>+[0-9]*/im; \ var buff = text.match(re);\ re = /[0-9]/; \ var ans = buff[0].match(re);\ alert(\'поступило \'+ans+\' сообщений!\');\ "\ </iframe>'; }, 10000); }; |
var Widget = require("widget").Widget; var tabs = require('tabs'); var wuntils = require('sdk/window/utils'); var window = wuntils.getMostRecentBrowserWindow(); var document = window.document; exports.main = function() { new Widget({ id: "my-widget-1", label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/favicon.ico", }); setInterval( function() { window.alert("Work"); }, 10000); }; Выдает ошибку set interval is not defined При этом var Widget = require("widget").Widget; var tabs = require('tabs'); var wuntils = require('sdk/window/utils'); var window = wuntils.getMostRecentBrowserWindow(); var document = window.document; exports.main = function() { new Widget({ id: "my-widget-1", label: "My Mozilla Widget", contentURL: "http://www.mozilla.org/favicon.ico", onClick: function() { window.alert("Work"); } }); }; Работает нормально. |
Часовой пояс GMT +3, время: 06:06. |