Я новичок в Javascript и Greasemonkey, поэтому не стесняйтесь поправлять меня, если я делаю это неэффективно или неправильно.

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

Таким образом, программа просматривает таблицу, в которой хранится обсуждение, и добавляет дочерний узел в конец таблицы. Я хочу, чтобы этот childNode был формой, созданной на странице ответа.

Вот скелет моего сценария:

// ==UserScript== 
// @name QuickEeply 
// @namespace  http://userscripts.org/users/181447 
// @description    Adds "QuickReply" forms to TCC discussion posts 
// @include        * 
// ==/UserScript==


var tables = document.getElementsByTagName("td");  


for (var i = 0; i < tables.length; i++) {

 if (tables[i].className == "content") 
 {    var editTable = tables[i];
 } 

}

editTable.appendChild = ''

Вот сценарий, который я скопировал и вставил со "страницы ответа"

<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">
 <input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">
 <br>
 Message:<br>
 <textarea rows="20" style="width:70%;" name="message" id="message"></textarea>

 <br>
 <br>
 <input type="submit" id="submit_post" value="Post Reply">
 <input type="hidden" name="post_id" value="1010815">
 <input type="hidden" name="thread_id" value="1010815">
</form>

Итак, как я могу создать сценарий, который находит thread_id текущей страницы и создает поле ответа для каждой страницы на странице, где фактически находится поток.

Изменить: вот исходный код -

http://pastebin.com/2UaUVGJA (главная страница обсуждения)
http://pastebin.com/hAx2SPUu (страница ответа)

РЕДАКТИРОВАТЬ 2:

I've used Brock's template, and it's not working.  What do I need to do to correct it?

// ==UserScript==
// @name           Quick_ReplyTest
// @namespace      http://userscripts.org/users/181447
// @description    Inserts QuickReply
// @include        *
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==


/* Optional:
window.addEventListener ("load", Greasemonkey_main, false);
*/

$(document).ready (Greasemonkey_main);


function Greasemonkey_main ()
{
    /*--- Get the first node inside the id="main" span (Google.com)
        If that's not there, then get the first node of the html body.
    */
    var TargetNode  = $("a[href*='event=reply/post']");
    if (!TargetNode)
        TargetNode  = $("body *:first");


  $(TargetNode).after
    (
        "<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">
        + "<input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">"
        + "<br> Message:<br>"
        + "<textarea rows="20" style="width:70%;" name="message" id="message"></textarea>"
        + "<br> <br>"
        + "<input type="submit" id="submit_post" value="Post Reply">"
        + "<input type="hidden" name="post_id" value="1010815">"
        +"<input type="hidden" name="thread_id" value="1010815">"
        +"</form>"
    );
}
1
Parseltongue 26 Июн 2010 в 04:33

2 ответа

Лучший ответ

Перейдите к этому ответьте и получите шаблон Greasemonkey.

Он показывает вам, как вставить HTML, как и вашу форму, в определенные узлы.

Замените HTML-код таблицы этого образца HTML-кодом вашей формы. Тогда ваш TargetNode будет чем-то вроде $("a[href*='event=reply/post']") - на основе указанной страницы. Обратите внимание, что это должно вставлять форму в каждую запись сообщения.

Предупреждение: форма не обязательно будет там, где вы хотите, и мы еще не синхронизировали форму с каждым сообщением.

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

0
Community 23 Май 2017 в 10:27

Re :

РЕДАКТИРОВАТЬ 2: Я использовал шаблон Брока, и он не работает. Что мне нужно сделать, чтобы это исправить?

Вы должны быть предельно осторожны с многострочными строками и строками с кавычками или апострофами. Ошибка синтаксиса javascript в строке <form>.

Я почистил это для вас (и изменил синтаксис на свой предпочтительный стиль) ...

Обратите внимание, как подсветка синтаксиса StackOverflow сохраняет строку красной? Большинство редакторов программирования тоже дадут такую подсказку.

$(TargetNode).after
(
   '<form method="POST" action="http://dl.tccd.edu/index.php/classforums/posts/event=saveReply">    \
    <input type="hidden" name="subject" size="45" id="txt_subject" maxlength="200" value="">        \
    <br> Message:<br>                                                                               \
    <textarea rows="20" style="width:70%;" name="message" id="message"></textarea>                  \
    <br> <br>                                                                                       \
    <input type="submit" id="submit_post" value="Post Reply">                                       \
    <input type="hidden" name="post_id" value="1010815">                                            \
    <input type="hidden" name="thread_id" value="1010815">                                          \
    </form>                                                                                         \
   '
);

.

В случае возникновения дополнительных вопросов, пожалуйста, откройте новый вопрос, чтобы не было слишком сложно следить за ним.

0
Brock Adams 26 Июн 2010 в 19:41