Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 23.09.2013, 22:54
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

Вообщем замучался я с авторизацией и решил пойти другим путем. Решил пусть скрипт работает только на странице нужного мне сайта когда я авторизирован. Но мне надо выводить на любой странице инфу, которая находится по определенной ссылке. Сделал так:

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, 24.09.2013 в 14:41.
Ответить с цитированием
  #12 (permalink)  
Старый 24.09.2013, 20:56
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Torero,

если ты авторизован на сайте, то можешь просто загружать строку через Request, безо всяких iframe.
по идее, Request должен передать все куки.
Ответить с цитированием
  #13 (permalink)  
Старый 26.09.2013, 00:07
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

Да, но мне надо чтобы данные на странице оставались те же. Вот сижу я на сайте и делами занимаюсь. Надо чтобы скрипт не мешал мне работать, но при этом при появлении нового сообщения я сразу же о нем узнавал. Но я этот вопрос уже решил методом тыка.
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 секунд?? Весь вечер промучился с таймерами, так ничего и не получилось((
Ответить с цитированием
  #14 (permalink)  
Старый 26.09.2013, 17:22
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Torero
Да, но мне надо чтобы данные на странице оставались те же.
я не понимаю твоих затруднений. данные на странице никуда не денутся, если с помощью Request загрузить некий хтмл - он будет как строка у тебя в коде, и больше нигде.

с регексами элементарно:
var ans = (/поступило\s+<b>(\d*)/.test(text) ? RegExp.$1 : "0");


с таймерами тоже просто:
// таймер с интервалом в 1 мин (60000 мкс)
setInterval(function() {
   // тут все действия - загрузка html через Request и добыча числа регексом.
}, 60000);
Ответить с цитированием
  #15 (permalink)  
Старый 26.09.2013, 19:48
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

За регулярку спасибо. А с 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". Пытался обьявление функции вывести в самый первый блок, потом сразу за скобки нью виджета, потом вообще в самый конец.. Работает только вариант с предыдущего поста, срабатывающий по клику на виджет(
Ответить с цитированием
  #16 (permalink)  
Старый 26.09.2013, 20:31
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

попробуй так

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);
};
Ответить с цитированием
  #17 (permalink)  
Старый 26.09.2013, 21:02
Интересующийся
Отправить личное сообщение для Torero Посмотреть профиль Найти все сообщения от Torero
 
Регистрация: 11.03.2013
Сообщений: 20

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");
}
});
};

Работает нормально.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как сохранить быстро перезагружаемую страницу? avatator Общие вопросы Javascript 8 16.05.2013 01:39
Помогите глупенькой, как перейти на n-ную страницу сайта где джава??? nslannd Общие вопросы Javascript 12 19.04.2012 10:00
Расширение для Firefox decadent Firefox/Mozilla 1 12.05.2011 11:16
Разработка дополнений для Mozilla FireFox и ThunderBird RUVATA Общие вопросы Javascript 0 08.02.2011 15:50