2017-04-16 2 views
0

Mon but est de changer une valeur a-d à l'intérieur du tableau options dans menu.html en utilisant l'extension Greasemonkey dans Firefox, mais mon problème est que l'élément que je suis en train de sélectionner/l'accès est chargé en tant cadre.élément Sélectionnez dans un cadre

J'ai essayé de résoudre ce problème depuis un certain temps maintenant et je serais très heureux si quelqu'un pouvait m'aider.


J'ai deux fichiers main.html et menu.html dont le contenu est:

main.html (est la page principale)

<html> 

<head> 
    <meta http-equiv="Pragma" content="no-cache"> 

    <script language="javascript"> 
     document.writeln("<frameset rows='89,*,15' border='0' frameborder='0' framespacing='0'>"); 

     // here is the menu frame 
     document.writeln("<frame src='menu.html' name='menufrm' frameborder='no' border='0' scrolling='no' target='_self' marginwidth='0' marginheight='0' noresize>"); 

     document.writeln("</frameset>"); 

    </script> 

</head> 

</html> 

menu.html (est chargé "par" un cadre)

<html> 

<head> 
    <meta http-equiv='Pragma' content='no-cache'> 

    <link rel=stylesheet href='stylemain.css' type='text/css'> 
    <script language='javascript' src='menuBcm.js'></script> 

    <base target="_self"> 
</head> 

<body class='mainMenuBody' topmargin="0" leftmargin="0" marginwidth="0" marginheight="0"> 

    <table border="0" cellpadding="0" cellspacing="0" height="1000"> 

     <tr> 
      <td class='menu' width="170" valign="top" align="left"> 

       <script language='javascript'> 
        var options = new Array('a', 
         'b', 
         'c'); 

        // ultimate goal is to change the value of a to d above before 
        // execution of the script below  

        createBcmMenu(options); // from menuBcm.js 
        initializeDocument(); 
       </script> 

      </td> 
     </tr> 

    </table> 
</body> 

</html> 

Qui regarde quelque chose comme ceci:

+----------------------------+ 
| main page (192.168.1.1) | 
|       | 
| +---------------------+ | 
| | frame (192.168.1.1) | | 
| +---------------------+ | 
|       | 
+----------------------------+ 

Greasemonkey script:

// ==UserScript== 
// @name  a-to-d 
// @namespace namespace 
// @include  http://192.168.1.1/main.html 
// @include  http://192.168.1.1/menu.html 
// @version  1 
// @grant  none 
// @run-at  document-start 
// ==/UserScript== 

var newScript = `var options = new Array('d','b','c');` ; 

// somehow select that element below 
document.(!).innerHTML = newScript; // (!): somehow select script element in menu.html 
+2

Les cadres sont obsolètes depuis des années ... Pourquoi avez-vous besoin de cadres en premier lieu? – charlietfl

+1

Merci pour votre commentaire. Je ne suis pas l'auteur de ce code original et je n'ai pas la possibilité de changer le code pour supprimer les images. – Clone

Répondre

2

Vous pouvez accéder à la fenêtre de cadre à l'aide window.frames.menufrm

Puis faire des choses comme:

var frm = window.frames.menufrm;  
frm.options = ['d','b','c']; 
frm.createBcmMenu(options); 

Aucune garantie qu'appeler la fonction à nouveau fonctionnera bien mais vous ne pouvez rien changer avant que le cadre ne soit chargé et l'appel de fonction d'origine aura déjà été exécuté

+0

Merci pour votre contribution! Mais en exécutant le code ci-dessus, j'obtiens 'ReferenceError: les options ne sont pas définies. – Clone