Javascript tampermonkey脚本跨多个页面运行

Javascript tampermonkey脚本跨多个页面运行,javascript,tampermonkey,Javascript,Tampermonkey,这是我想做的一个例子。 当我们在目标url上时,即stackoverflow,在底部显示一个带有按钮的粘性页脚。 要在搜索中键入内容,请使用其中一个按钮提交表单。在此之后,它等待页面加载,并对刚刚加载的页面执行一些操作,即单击第一个链接 我发现这是不可能的,只是在提交后运行一次点击,因为页面的框架会发生变化或者类似的事情,如何使用tampermonkey来实现这一点呢 // ==UserScript== // @name New Userscript // @namespace

这是我想做的一个例子。 当我们在目标url上时,即stackoverflow,在底部显示一个带有按钮的粘性页脚。 要在搜索中键入内容,请使用其中一个按钮提交表单。在此之后,它等待页面加载,并对刚刚加载的页面执行一些操作,即单击第一个链接

我发现这是不可能的,只是在提交后运行一次点击,因为页面的框架会发生变化或者类似的事情,如何使用tampermonkey来实现这一点呢

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    $('body').append('<div id="test"><p><button onclick="myFunction()">Click me</button></p></div>');
    $('body').append(
        `<script type="text/javascript">
             function myFunction() {
                 // page 1
                 document.querySelector('#search > div > input').value="tampermonkey";
                 document.forms[0].submit();

                 // page 2 (DOEST WORK)
                 document.querySelector('#question-summary-29592068 > div.summary > div.result-link > h3 > a');
             }
         </script>`
    );

    $('#test').css({'position': 'fixed',
                   'left': '0',
                   'bottom': '0',
                   'width': '100%',
                   'background-color': 'red',
                   'color': 'white',
                   'text-align': 'center',
                   'z-index':'1'
                  });

})();
/==UserScript==
//@name新用户脚本
//@名称空间http://tampermonkey.net/
//@version 0.1
//@description尝试接管世界!
//@author You
//@匹配https://stackoverflow.com/
//@grant none
//==/UserScript==
(功能(){
"严格使用",;
$('body')。追加('Click me

); $('body')。追加( ` 函数myFunction(){ //第1页 document.querySelector(“#search>div>input”).value=“tampermonkey”; document.forms[0]。提交(); //第2页(实际工作) document.querySelector(“#question-summary-29592068>div.summary>div.result-link>h3>a”); } ` ); $(#test').css({'position':'fixed', “左”:“0”, “底部”:“0”, “宽度”:“100%”, “背景色”:“红色”, “颜色”:“白色”, “文本对齐”:“居中”, “z索引”:“1” }); })();
脚本可能无法工作的一个原因是,在脚本顶部

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/
// @grant        none
// ==/UserScript==

/@match
仅与stackoverflow.com主页上的匹配项匹配,该主页不包括搜索页面,因此@match应为
/@matchhttps://stackoverflow.com/*
它与主页和搜索页面匹配。您还应该使用
if
语句使“单击我!”按钮仅显示在主页上。 如果你愿意,我也完全解决了你的问题

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/*
// @grant        none
// ==/UserScript==

window.onload = function() {
    'use strict';
    if (location.href == "https://stackoverflow.com/search?q=tampermonkey") {
        alert(document.querySelector('#question-summary-29592068 > div.summary > div.result-link > h3 > a'));
    }else {
        $('body').append('<div id="test"><p><button onclick="myFunction()">Click me</button></p></div>');
        $('body').append(
            `<script type="text/javascript">
                 function myFunction() {
                     // page 1
                     document.querySelector('#search > div > input').value="tampermonkey";
                     document.forms[0].submit();
                 }
            </script>`
        );

        $('#test').css({
            'position': 'fixed',
            'left': '0',
            'bottom': '0',
            'width': '100%',
            'background-color': 'red',
            'color': 'white',
            'text-align': 'center',
            'z-index':'1'
        });
    }

};
/==UserScript==
//@name新用户脚本
//@名称空间http://tampermonkey.net/
//@version 0.1
//@description尝试接管世界!
//@author You
//@匹配https://stackoverflow.com/*
//@grant none
//==/UserScript==
window.onload=函数(){
"严格使用",;
如果(location.href==”https://stackoverflow.com/search?q=tampermonkey") {
警报(document.querySelector('question-summary-29592068>div.summary>div.result-link>h3>a');
}否则{
$('body')。追加('Click me

); $('body')。追加( ` 函数myFunction(){ //第1页 document.querySelector(“#search>div>input”).value=“tampermonkey”; document.forms[0]。提交(); } ` ); $('#test').css({ '位置':'固定', “左”:“0”, “底部”:“0”, “宽度”:“100%”, “背景色”:“红色”, “颜色”:“白色”, “文本对齐”:“居中”, “z索引”:“1” }); } };
问题在于,您提交后希望代码继续运行-根据您所在的页面,您需要运行不同的代码确切地说,我找到了可以使用post消息或类似内容的地方,但我真的不明白.postmessage如何跨iFrame工作。。。不跨不在浏览器中的页面-
文档。表单[0]。提交()将当前页面替换为新页面。。。您无法从新页面与旧页面通信,因为旧页面不再在浏览器中-正如我所说的,您需要根据页面运行不同的代码。啊,好的,因此,这里使用tampermonkey的唯一选项是,无论提交的url是什么,都可以创建一个单独的脚本?可以是同一个monkey脚本-只需要在脚本中添加一些逻辑