Javascript to fill a formatted text field on a web site

北战南征 提交于 2019-12-11 12:16:37

问题


I know virtually nothing about Javascript. By a monkey-see, monkey-do approach I’ve managed to successfully use Javascript within AppleScript/Safari to fill text fields on a web-site using the following command:

do JavaScript "document.getElementById('ElementID').value ='TextToEnter';" in document 1

I’ve been able to enter text into all fields except one. The fields that work are labeled as input type="text”. The field that doesn’t work is complex in that the entered text can be formatted (bold, italics, underline, alignment, etc.) after entry. Assuming I’ve identified the correct source code for this element it looks as follows PRIOR TO any text entry:

<body id="tinymce" class="mce-content-body " onload="window.parent.tinymce.get('fax_text').fire('load');" contenteditable="true" spellcheck="false"><p><br data-mce-bogus="1"></p></body>

Depending on how its viewed, sometimes the p and br tags appear on separate lines but everything is otherwise identical.

After manual entry of text (“INSERT TEXT HERE”) directly into the web page's text field the source code becomes:

<body id="tinymce" class="mce-content-body " onload="window.parent.tinymce.get('fax_text').fire('load');" contenteditable="true" spellcheck="false"><p>INSERT TEXT HERE</p></body>

The following did not work (wrapped in Applescript):

document.getElementById('tinymce').value ='INSERT TEXT HERE';

It produces the error: "missing value".

As per @WhiteHat, the following with n= 0-4 inserted text at several spots on the page but not in the targeted text field; n > 4 resulted in the "missing value" error:

document.getElementsByTagName('p')[n].innerHTML ='Insert text here';

I tried targeting the br tag but to no avail. How do I target this text field with Javascript? Note: I do not need to format the entered text.


回答1:


This text field is in an iFrame. This iFrame contains an HTML document (<html><head><body>).

To get this document, you need the_iFrame.contentDocument.

do JavaScript "var ifr = document.getElementById('fax_text_ifr'); ifr.contentDocument.getElementsByTagName('p')[0].innerHTML = 'some text';" in document 1



回答2:


You need to access the <p> element, which is just after the body of the document, as such...

document.getElementsByTagName('P')[0].innerHTML = 'your text'

The getElementsByTagName function returns an array of all elements with the tag name you provide, P in this case. You're looking for the first one, hence the [0].

The innerHTML property will allow you to set the contents of the <p> element.

Following is a good JavaScript reference...

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference

The following reference is for the web page, or Document Object Model (DOM).

https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model

And tinymce is a 3rd party JavaScript library which allows the rich edit functionality.

http://www.tinymce.com/

Based on the comments, the specific field you are looking for is named fax_text. Here is the source, it's in a textarea tag, take note on which function to use TagName vs. Name...

document.getElementsByName('fax_text')[0].value = 'This is my text!';
document.getElementsByTagName('textarea')[0].value = 
  document.getElementsByName('fax_text')[0].value +
  '\nThis is additional text...';
<textarea rows="5" name="fax_text" cols="36" class="mytext"></textarea>


来源:https://stackoverflow.com/questions/32094551/javascript-to-fill-a-formatted-text-field-on-a-web-site

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!