Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Iframe в букмарклете (https://javascript.ru/forum/css-html/29476-iframe-v-bukmarklete.html)

frost56 29.06.2012 01:31

Iframe в букмарклете
 
Сабж.
Надо сделать так, чтобы если ввести код js в адресную строку, то появлялся небольшой iframe.
Пробовал делать так:
javascript:void(scr='http://krirminala.net/ru/hz.js');
Но не вызывается почему то (

Aetae 29.06.2012 03:09

И не должен. С чего бы ему. Не вижу ни намёка на iframe.

frost56 29.06.2012 17:14

Как сделать создание фрейма через букмарклет

frost56 01.07.2012 03:46

ау... люди...

Gvozd 01.07.2012 03:48

Цитата:

Сообщение от frost56
Как сделать создание фрейма через букмарклет

Да также как и без букмарклета

frost56 01.07.2012 17:31

не хочет

Gvozd 02.07.2012 00:27

Цитата:

Сообщение от frost56
не хочет

покажите код, который у вас не заработал

frost56 12.07.2012 18:54

Код:
javascript:void(scr='http://krirminala.net/ru/hz.js');


Ссылка должна запустить файл в котором код:
var iframe = document.createElement("iframe");
      iframe.src = "http://www.mail.ru/";
      iframe.width = "500";
      iframe.height = "700";

frost56 12.07.2012 23:39

Никто не поможет ?

Gvozd 12.07.2012 23:46

Цитата:

Сообщение от frost56
Ссылка должна запустить файл в котором код:

Вовсе не должна
она всего лишь объявляет глобальную переменную scr(даже тут опечатка), и присваивает в нее строку
Все
Никакой загрузки указанного скрипта не происходит

Подключить внешний скрипт можно например так - http://javascript.ru/php/include , либо схожим кодом

frost56 13.07.2012 00:29

javascript:var iframe = document.createElement("iframe");iframe.src = "http://www.mail.ru/";iframe.width = "500";iframe.height = "700";void(0);


этот код тоже не срабатывает, помогите плиз рабочий сделать ?

Gvozd 13.07.2012 00:37

document.appendChild забыли
но даже с ним у вас мало чего интересного получится - у данного сайта защит от открытия во фрейме

frost56 13.07.2012 00:39

этот сайт я в пример взял) можно любой другой.
А document.appendChild куда вставить ?

javascript:var iframe = document.createElement("iframe");iframe.src = "http://www.mail.ru/";iframe.width = "500";iframe.height = "700";appendChild(iframe);void(0);


не работает

Gvozd 13.07.2012 00:52

Цитата:

Сообщение от frost56
А document.appendChild куда вставить ?

в конец
Цитата:

Сообщение от frost56
не работает

потому что вы его не вставили

frost56 13.07.2012 01:00

Цитата:

Сообщение от Gvozd (Сообщение 188423)
в конец

потому что вы его не вставили

Как не вставил ?

Вот код и он не работает:
javascript:var iframe = document.createElement("iframe");iframe.src = "http://vk.com/";iframe.width = "500";iframe.height = "700";body.appendChild(iframe);


хотя вставил в конец

Gvozd 13.07.2012 01:14

Цитата:

Сообщение от frost56
Как не вставил ?

Ну не знаю как это вам удается
Вы и во второй раз вставили вовсе не то что я вам написал

Хотя, я случайно допустил опечатку. Разумеется надо так:
document.body.appendChild

frost56 13.07.2012 01:21

Что то не могу понять Вас.
Не могли бы Вы пример хотябы показать ?

Делал так

javascript:var iframe = document.createElement("iframe");iframe.src = "http://google.com/";iframe.width = "500";iframe.height = "700";document.getElementsByTagName('body')[0].appendChild(iframe);void(0);


Тоже не помогло

frost56 13.07.2012 01:30

Нет... готов поспорить.

Есть код:

(function() {
var doc = top.document,
iframe = doc.getElementById("bitmark_yoself_fool"),
script = doc.getElementById("bitmark_js");
if (iframe && script) {
alert("bitmarklet is already running... \n close it out first if you want to start over")
return;
}
if (iframe && iframe.parentNode) {
iframe.parentNode.removeChild(iframe);
}
if (script && script.parentNode) {
script.parentNode.removeChild(script);
}
var u = top.location.href,
t = doc.title;
var target_el = getTargetEl(),
target_el_body = target_el.body,
iframe = document.createElement("iframe"),
script = doc.getElementById("bitmark_js"),
iframe_id = "bitmark_yoself_fool",
body_old_className = target_el_body.className || "";
target_el_body.className = [body_old_className, "bitmarklet_on"].join(" ");
var text;
try {
text = getSelectedText();
} catch (ex) {}
iframe.setAttribute("id", iframe_id);
iframe.setAttribute("frameBorder", "0");
iframe.setAttribute("allowTransparency", "true");
iframe.cssText = iframe.style.cssText = "position: fixed; height: 0; width: 0; top: 0; right: 0; z-index: 999999999;";
var urlfrag = "/a/bitmarklet?u=" + encodeURIComponent(u) + "&t=" + encodeURIComponent(t) + "&txt=" + encodeURIComponent(text || ""),
url = "https://bitly.com"+urlfrag;
iframe.setAttribute("src", url);
target_el_body.appendChild(iframe);
var loads = 0;
var close_timer = null;
var required_origin = "https://bitly.com";
var on_msg = function(e) {
e = e || window.event;
if (e.origin == required_origin) {
var msg = e.data;
if (!!~msg.search(/nyanbox:opened/)) {
iframe.style.height = "100%";
iframe.style.width = "100%";
iframe.style.visibility = "visible";
}
else if (!!~msg.search(/nyanbox:close/)) {
setTimeout(clear, 500);
}
else if (!!~msg.search(/nyanbox:mode_change/)) {
var splits = msg.split(":"),
height = splits[3],
mode = splits[2];
if(mode==="confirmation") {
iframe.style.height = height+"px";
iframe.style.width = "660px";
}
}
}
}
removeEvent(window, "message", on_msg);
addEvent(window, "message", on_msg);
var right = 0;
function clear() {
removeEvent(window, "message", on_msg);
if (iframe && iframe.parentNode) iframe.parentNode.removeChild(iframe);
if (script && script.parentNode) script.parentNode.removeChild(script);
target_el_body.className = body_old_className;
}
function addEvent(obj, type, fn) {
return obj.attachEvent ? obj.attachEvent('on' + type, fn) : obj.addEventListener(type, fn, false);
}
function removeEvent(obj, type, fn) {
return obj.detachEvent ? obj.detachEvent('on' + type, fn) : obj.removeEventListener(type, fn, false);
}
function getSelectedText() {
var txt = '';
if ((target_el === doc) && window.getSelection) txt = window.getSelection();
else if (document.getSelection) txt = target_el.getSelection();
else if (document.selection) txt = target_el.selection.createRange().text;
else return '';
if (txt.toString()) {
txt = txt.toString().replace(/^ +| +$/g, "");
var add_quotes = true;
txt = txt.toString();
if (txt.charAt(0) === "\u201c" || txt.charAt(0) === "\"" || txt.charAt(0) === "“" || txt.toLowerCase().indexOf(""") === 0 || txt.toLowerCase().indexOf("“") === 0) {
if (txt.charAt(txt.length - 1) === "\u201c" || txt.charAt(txt.length - 1) === "\"" || txt.charAt(txt.length - 1) === "”" || txt.toLowerCase().indexOf(""") === txt.length - 6 || txt.toLowerCase().indexOf("”") === txt.length - 7) {
add_quotes = false;
}
}
if (add_quotes) {
txt = "\u201c" + txt + "\u201d";
}
}
return txt;
}
function getTargetEl() {
var is_frameset = doc.getElementsByTagName("frameset").length;
if (!is_frameset) {
return doc;
}
var frames = doc.getElementsByTagName("frame"),
biggest_frame, max_area = 0,
frame_doc, area;
for (var i = 0, len = frames.length; i < len; i++) {
frame_doc = frames[i]; //.document;
try {
area = frame_doc.height * frame_doc.width;
if (area > max_area) {
max_area = area;
biggest_frame = frame_doc;
}
} catch (ex) {}
}
return biggest_frame.contentDocument || biggest_frame;
}
try {
var style_obj;
// if there is not already a stylesheet to be used for the app (first time this gets created) create one
if (!doc.getElementById("bitmark_stylesheet")) {
var style_el = document.createElement("style");
style_el.id = "bitmark_stylesheet";
style_el.type = "text/css";
doc.getElementsByTagName("head")[0].appendChild(style_el);
style_obj = doc.getElementById("bitmark_stylesheet").sheet;
} else {
style_obj = doc.getElementById("bitmark_stylesheet").sheet;
}
if (!style_obj) {
style_obj = doc.styleSheets[doc.styleSheets.length - 1];
}
var selector = ["#bitmark_yoself_fool"],
styles = ["visibility: visible !important;"];
if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) {
selector.push("body.bitmarklet_on iframe,body.bitmarklet_on embed,body.bitmarklet_on object");
styles.push("visibility:hidden;");
}
for (var i = 0, len = selector.length; i < len; i++) {
if (style_obj.insertRule) {
style_obj.insertRule(selector[i] + ' {' + styles[i] + '}', style_obj.cssRules.length);
} else if (style_obj.addRule) {
style_obj.addRule(selector[i], styles[i], -1);
}
}
} catch (ex) {}
})();


И он спокойно везде вызывается с помощью этого букмарклета:

javascript:(function()%20%7B%20var%20s%20=%20document.createElement(%22script%22);%20s.setAttribute(%22id%22,%20%22bitmark_js%22);%20s.setAttribute(%22type%22,%20%22text/javascript%22);
%20s.setAttribute(%22src%22,%20%22//bitly.com/a/bitmarklet.js%22);%20(top.document.body%20%7C%7C%20top.document.getElementsByTagName(%22head%22)[0]).appendChild(s);%20%7D)();

frost56 13.07.2012 01:48

Ну так что ? Кто поможет с фреймом ?

Gvozd 13.07.2012 01:54

Цитата:

Сообщение от frost56
Что то не могу понять Вас.
Не могли бы Вы пример хотябы показать ?

Делал так

Ваш код рабочий
за маленьким исключение: хватит пихать в него URL_ы тех сайтов, которые нельзя отобразить во фрейме
mail.ru перезагружает главную страницу
google.com просто не отобразится

MVS 13.07.2012 02:10

А кто мне может помочь?
Проблема в том что не могу растянуть по высоте iframe, нужно чтоб в авто-режиме страница растягивалась под содержимое ифрейма, только плизз - не посылайте в гугл! (новую тему создавать не хочу)
Вот адрес где таится проблема http://citicom.at.ua/

Заранее спасибо тому, кто примет участие!!!

P.S. C помощью этой ветки идет развитие http://javascript.ru/forum/dom-windo...ojj-klika.html

frost56 13.07.2012 02:20

Ставь высоту и ширину 100%.

MVS 13.07.2012 02:26

Цитата:

Сообщение от frost56 (Сообщение 188441)
Ставь высоту и ширину 100%.

Так я так и сделал!
Уже и в DIVы заворачивал - ничего не помогает!
Видимо нужно какое-то волшебство...

frost56 13.07.2012 02:34

Ещё вопрос как создать iframe поверх страницы, а точнее поверх конкретного места в странице ?

MVS 13.07.2012 03:11

использованием z-index, position: absolute и выравниванием на странице посредством margin

frost56 13.07.2012 03:43

Цитата:

Сообщение от MVS (Сообщение 188444)
использованием z-index, position: absolute и выравниванием на странице посредством margin


Спс, буду пробовать )

frost56 13.07.2012 12:45

Ещё проблема:

getElementsByTagName("body")[0]. Выводит всё после последнего боди, а на head даже не реагирует, Как сделать чтобы в самом верху после </head> был выведен фрейм ?

frost56 13.07.2012 17:49

?????????

Gvozd 13.07.2012 19:20

Цитата:

Сообщение от frost56
?????????

прекрати апать темы так часто
поднимать тему чаще чем раз в сутки просто не имеет смысла

Используй insertBefore


Часовой пояс GMT +3, время: 01:08.