Home > front end >  .toString cause Cannot read properties of undefined (reading 'toString') when have variabl
.toString cause Cannot read properties of undefined (reading 'toString') when have variabl

Time:08-13

I want to open a link(php file) in new tab and add js code to that file. I have use method shown here to do this process. In my code, I have variable which contain text to add in js code. I want to insert the variable value, "garry" in index.php input field. Error show Cannot read properties of undefined (reading 'toString'). The input field remain blank. I have tried the following ways before pass to toString() but not working.

  • term=term.toString(); -Cannot read properties of undefined (reading 'toString')

  • term='${term}'; -Cannot read properties of undefined (reading 'toString')

  • term=${term}; -tried adding back tick=* Cannot read properties of undefined (reading 'toString')

  • term=String(term); -Cannot read properties of undefined (reading 'toString')

<html>
<head>
    <script>
        var topic='1_1_1_2_anchors_';
        $(document).ready(function(){
            childWindow     ="tab1";    
            //https://stackoverflow.com/questions/29909927/inject-an-opened-window-with-script          
            var theWindow   =window.open('index.php'),
            theDoc          =theWindow.document,
            theScript       =document.createElement('script');
            var term        ="garry";
           
           function injectThis(term) 
            {
            //term=term.toString(); //=Cannot read properties of undefined (reading 'toString')
            //term='${term}';   //= Cannot read properties of undefined (reading 'toString')
            //term=`${term}`;   //=Cannot read properties of undefined (reading 'toString')
            //term=String(term); //=Cannot read properties of undefined (reading 'toString')
               $("#input_name").val(term);
            }
            theScript.innerHTML             ='window.onload = '   injectThis(term).toString()   ';';
            theDoc.body.appendChild(theScript);
        })
    </script>
</head>
<body>
    <h1>Main</h1>
</body>
</html>

index.php

<html>
<head>
    <script src="jquery/dist/jquery.min.js"></script>
</head>
 <body>
   <input id="input_name" type="text" value="">
</body>

if hardcode the value in $("#input_name").val("garry"); Then it works.

function injectThis()
 {
    $("#input_name").val("garry");
 }
    theScript.innerHTML  ='window.onload = '   injectThis.toString()   ';';

How to pass variable?

CodePudding user response:

var term ="garry"; 

it's a local variable from the function passed to $(document).ready So it's not defined in the other script ("theScript")

You have to define all variables that are going to be used inside of the injectThis inside of the injectThis function or globally

CodePudding user response:

I have define the var term ="garry"; outside document.ready(function(){}). Then, I get the variable value by define term=window.opener.term; inside function injectThis(){}.

The Window interface's opener property returns a reference to the window that opened the window, either with open(), or by navigating a link with a target attribute.

Using window.opener object, we can access variable declared in that file.

After that, change injectThis(term).toString() to injectThis.toString() in theScript.innerHTML ='window.onload = ' injectThis.toString() ';';

<html>
<head>
<script src="jquery/dist/jquery.min.js"></script>
<script>
     var term        ="garry";
    $(document).ready(function(){
        childWindow     ="tab1";    
        //https://stackoverflow.com/questions/29909927/inject-an-opened-window-with-script          
        var theWindow   =window.open('index.php'),
        theDoc          =theWindow.document,
        theScript       =document.createElement('script'); 
        //term=term.toString(); //=Cannot read properties of undefined (reading 'toString')
        //term='${term}';   //=Cannot read properties of undefined (reading 'toString')
        //term=`${term}`;   //=Cannot read properties of undefined (reading 'toString')
        //term=String(term); //=Cannot read properties of undefined (reading 'toString')
       function injectThis()
        {
           term=window.opener.term;
           $("#input_name").val(term);
        }
        theScript.innerHTML  ='window.onload = '   injectThis.toString()   ';';
        theDoc.body.appendChild(theScript);
    })
   </script>
  </head>
 <body>
 <h1>TOPIC 4</h1>
  </body>
  </html>

index.php

<html>
<head>
    <script src="jquery/dist/jquery.min.js"></script>
</head>
 <body>
   <input id="input_name" type="text" value="">
</body>
  • Related