возвращение неопределенного в букмарклет - страница пересылок - PullRequest
1 голос
/ 21 июня 2011

Я пытаюсь получить простой букмарклет, работающий с Rails, который создает форму с текущим заголовком страницы и URL и отправляет создать объект.

Проблема, с которой я сталкиваюсь, заключается в том, что когдаформа отправляется, она пересылается на страницу «успеха», а не просто остается на той же странице, как и должна.

Я знаю, что код букмарклета должен возвращаться неопределенным, чтобы не допустить этого, но я попытался поместить void(0) везде, где только можно придумать, но это все еще переходит на следующую страницу.

Вот два способа, которые я пробовал:

javascript:void((function(){
var s = document.createElement('script');
s.setAttribute('language','javascript');
s.setAttribute('src','http://localhost:3000/script/bookmarklet.js');
document.body.appendChild(s);
})());

и:

javascript:(function(){
var s = document.createElement('script');
s.setAttribute('language','javascript');
s.setAttribute('src','http://localhost:3000/script/bookmarklet.js');
document.body.appendChild(s);
void(0);
})();

Может ли другой файл .js вызывать проблему?Вот оно:

(function() {

function create_form() {
    var path = "http://localhost:3000/links";

    var newform = document.createElement('form');
    newform.setAttribute("method", "post");
    newform.setAttribute("action", path);
    newform.setAttribute("accept-charset","UTF-8");

    var title_hidden_field = document.createElement("input");
    title_hidden_field.setAttribute("type","hidden");
    title_hidden_field.setAttribute("name", "link[title]");
    title_hidden_field.setAttribute("value", "Test Title");

    newform.appendChild(title_hidden_field);

    var url_hidden_field = document.createElement("input");
    url_hidden_field.setAttribute("type","hidden");
    url_hidden_field.setAttribute("name", "link[url]");
    url_hidden_field.setAttribute("value", "http://www.example.com");

    newform.appendChild(url_hidden_field);

    document.body.appendChild(newform);
    newform.submit();
};

create_form();
})();

Я тоже пытался вернуть undefined, но поведение при пересылке не изменилось.Может ли это быть как-то связано с тем, как rails обрабатывает запрос на отправку формы?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Добавьте обработчик «onsubmit» к «newform» и используйте XMLHttpRequest для отправки данных.

    newform.onsubmit = function(event) {
        event.preventDefault();
        // Create XMLHttpRequest object and send data.
    }
1 голос
/ 25 июля 2011

Во-первых, void (0) используется для получения возвращаемого значения как неопределенного, что является одним из способов прекратить переход на следующую страницу, но здесь не применяется. А также убедитесь, что вы держите void (0) в конце букмарклета.

Единственный способ перестать переходить на следующую страницу - сначала создать невидимый встроенный фрейм (iframe)

var myiframe = document.createElement('iframe');
myiframe.scrolling = "no";
myiframe.name = "myiframe";
myiframe.id = "myiframe";
myiframe.src = "blank.html"; //so your users wont have to use their bandwith much, I think you can also set it to the about page in many browsers
myiframe.width = "0px"; //so it becomes invisible
myiframe.height = "0px"; //""
document.body.appendChild(myiframe)

или

var ThisBody = document.body.innerHTML
ThisBody += '<iframe frameborder="0" scrolling="no" name="myiframe" id="myiframe" src="blank.html" width="0px" height="0px"></iframe>

Затем, установив вашу новую форму с целью, которая здесь важна:

newform.target = "document.getElementById('myiframe')" //our iframe

Я думаю, что это так.

Также:

javascript:(function(){
var s = document.createElement('script');
s.setAttribute('language','javascript');
s.setAttribute('src','http://localhost:3000/script/bookmarklet.js');
document.body.appendChild(s);
})();void(0)

Вот где пустота должна идти ^^

...