cnergao 发表于 2013-2-17 20:49:10

[已解决]IE textarea 操作中如何往TinyMCE编辑框中写入内容?

本帖最后由 cnergao 于 2013-2-19 11:58 编辑

TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,支持目前流行的各种浏览器,由JavaScript写成。功能配置灵活简单(两行代码 就可以将编辑器嵌入网页中),支持AJAX。
    关于TinyMCE的介绍请参考http://www.iwms.net/n2065c17.aspx
   在初始化TinyMCE的时候,会把所有的TEXTAREA文本域在页面加载时将被转换成编辑器。
   
   现在有两个TEXTAREA
    <td class="label">产品标题</td><td class="input"><textarea class="txt" name="productdescription" style="width:200px;height:110px;"></textarea></td>
<td class="label">产品介绍</td><td class="input"><textarea id="contentform" rows="1" cols="1" style="width:580px;height:360px;" name="productcontent"></textarea>

   第一个产品标题的textarea可以通过_IEFormElementGetObjByName($oForm,"productseotitle")的方法来操作写值
    第二个产品介绍的textarea试了很多方法都不行。包括(_IEFormGetObjByName,_IEFormElementGetObjByName,_IETagNameGetCollection,_IEGetObjById ,_IEGetObjByName)里面有ID也有Name。就是无法写值。不知道是否因为TinyMCE初使化后变了。使用按键精灵带的浏览器分析网页元素。编辑框属性只显示“TAG”是“P"其他都没有。
   
   请问还有什么方法可以操作没?
    经过大家的帮助,现在已经找到输入的方法了。

解决方案:$oIE = _IECreate ("http://127.0.0.1/product-add.php",1,1,1,0)
WinActivate("")

$oFrames = _IEFrameGetCollection($oIE)
$oFrame = _IEFrameGetCollection($oIE, 0)
_IEPropertySet($oFrame, "innerhtml", "<p>品名:<strong>产品名称<br /></strong>造型:多样化/p>" ) 在此特别感谢:komaau3,haijie1223

cnergao 发表于 2013-2-17 20:58:43

本帖最后由 cnergao 于 2013-2-18 23:26 编辑

附上网页原代码供参考<div class="main_body">
<form id="sform" action="product-add.php" method="post" enctype="multipart/form-data">
<table class="inputform" cellpadding="1" cellspacing="1">
<td class="label">产品标题</td><td class="input"><textarea class="txt" name="productdescription" style="width:200px;height:110px;"></textarea></td>
<td class="label">产品介绍</td><td class="input"><textarea id="contentform" rows="1" cols="1" style="width:580px;height:360px;" name="productcontent"></textarea>
<!-- Load TinyMCE -->
<script type="text/javascript" src="tiny_mce/jquery.tinymce.js"></script>
<script type="text/javascript" src="tiny_mce/plugins/swampy_browser/sb.js"></script>
<script type="text/javascript">
        $().ready(function() {
                $("#contentform").tinymce({
                        // Location of TinyMCE script
                        script_url : 'tiny_mce/tiny_mce.js',

                        // General options
                        theme : "advanced",
                        language : "zh",
                        width : "580",
                        height : "360",
                        add_unload_trigger : true,
                        plugins : "Ybrowser,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

                        // Theme options
                        theme_advanced_buttons1 : "undo,redo,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,formatselect,fontselect,fontsizeselect",
                        theme_advanced_buttons2 : "forecolor,backcolor,del,ins,|,cut,copy,paste,pastetext,pasteword,|,outdent,indent,attribs,|,link,unlink,anchor,image,Ybrowser,media,cleanup,|,preview,code,fullscreen",
                        theme_advanced_buttons3 : "",
                        theme_advanced_buttons4 : "",
                        theme_advanced_toolbar_location : "top",
                        theme_advanced_toolbar_align : "left",
                        theme_advanced_statusbar_location : "bottom",
                        theme_advanced_resizing : false,
                       
                        // Drop lists for link/image/media/template dialogs
                        template_external_list_url : "lists/template_list.js",
                        external_link_list_url : "lists/link_list.js",
                        external_image_list_url : "lists/image_list.js",
                        media_external_list_url : "lists/media_list.js"
                });
                var formoptions = {
                        beforeSubmit: function() {
                                $("#submitbtn").val("正在处理...");
                                $("#submitbtn").attr("disabled","disabled");
                        },
                        beforeSerialize: function($form, options) {
                                tinyMCE.triggerSave();               
                        },
            success: function (msg) {
                alert(msg);
                                if(msg == "产品添加成功!")
                                        $("#sform").resetForm();
                                $("#submitbtn").val("提交");
                                $("#submitbtn").attr("disabled","");
            }
      };
                $("#sform").ajaxForm(formoptions);
                $("#pubdate").datetimepicker({
                        showSecond: true,
                        timeFormat: 'hh:mm:ss',
                        hour:16,
                        minute:43,
                        second:26,
                        closeText:'完成',
                        currentText:'当前时间'
                });
        });
</script>
<!-- /TinyMCE -->
</td></tr>
</table>tinymce编辑框输入内容后分析所得源代码<BODY style="DISPLAY: block; webkitUserSelect: " dir=ltr id=tinymce class="mceContentBody " contentEditable=true spellcheck="0"><P>sfdsfdsfdssdfsd</P></BODY>

cnergao 发表于 2013-2-17 23:44:19

回复 3# au3脚本代写
怎么写有印象没?使用什么方法?或者那个程序源码还在吗?给我参考参考!

cnergao 发表于 2013-2-18 03:25:24

刚在国外的官方论坛转了一圈。搜索tinymce。发现有不少贴子也是说这个无法输入的。看了个大概。说要做为iframes来操作。看E文太累。无法看懂。有没有高手可以讲解一下!

cnergao 发表于 2013-2-18 11:37:29

$oIE = _IECreate ("http://127.0.0.1/product-add.php",1,1,1,0")
WinActivate("")
$oForm =_IEGetObjById ($oIE, "sform")
;MsgBox(0,"",$oForm)
$oText = _IEFormElementGetObjByName($oForm,"productname")
$oRadio = _IEFormElementGetObjByName($oForm,"productcategory")
$oTitle=_IEFormElementGetObjByName($oForm,"productseotitle")
$oKeywords=_IEFormElementGetObjByName($oForm,"productkeywords")
$oDescription=_IEFormElementGetObjByName($oForm,"productdescription")

$oContent=_IEFormElementGetObjByName($oForm,"productcontent");这个就是tinymce的编辑器。怎么都无法写入

$oClick=_IEGetObjById($oie,"submitbtn")
_IEFormElementSetValue ($oText, $oExcel.cells($Y,2).value)
_IEFormElementSetValue($oRadio,$oExcel.cells($Y,3).value)
_IEFormElementSetValue($oTitle,$oExcel.cells($Y,5).value)
_IEFormElementSetValue($oKeywords,$oExcel.cells($Y,6).value)
_IEFormElementSetValue($oDescription,$oExcel.cells($Y,7).value)
_IEFormElementSetValue($oContent,"proutding")
_IEAction($oClick,"click")
_IELoadWait ($oIE)
Sleep(1500)
ControlSend("windows", "fishing", "Button1","{ENTER}")
Sleep(500)

我试了很多方法。_IEFormElementGetObjByName ,_IEFormGetObjByName,_IEGetObjById,_IEGetObjByName,_IETagNameGetCollection
都不行

netegg 发表于 2013-2-18 23:23:45

本帖最后由 netegg 于 2013-2-18 23:27 编辑

见到过,不过有个疑问,怎么解析autoit,毕竟都是脚本类,好像和麻烦,如果加载引擎的话不如直接用原始的了
另外,你说的那个操作似乎不是很麻烦

cnergao 发表于 2013-2-18 23:30:05

回复 7# netegg

这个tinymce输入内容后有的ID=tinymce。
这个在源代码中也有
<script type="text/javascript">

      $().ready(function() {

                $("#contentform").tinymce({

                        // Location of TinyMCE script

直接用原始的怎么操作?

cnergao 发表于 2013-2-18 23:30:49

本帖最后由 cnergao 于 2013-2-18 23:32 编辑

现在的问题就是操作不到这个tinymce    。不知道这个要怎么引用过来进行操作。我各种语言并不是很懂。都是对照着例子看了又看的。昨晚在国外论坛看了很久。又跑到tinymce论坛上看了。还是不得其解。操作不了这个编辑器

komaau3 发表于 2013-2-19 02:00:09

回复 1# cnergao
正常元素操作就可以啊 没发现什么异常 可能你是用表单操作有些不当把

#include <IE.au3>

Global $oIE = _IEAttach("产品", "Text")
$o1 = _IEGetObjByName($oIE, "productdescription")
$o1.innertext = "1111111111";innertext和value都可以,浏览器手动输入观察 应该使用innertext属性比较合适
$o2 = _IEGetObjByName($oIE, "productcontent")
$o2.innertext = "2222222222";同上
#include <IE.au3>

Global $oIE = _IEAttach("产品", "Text")
$oTexts = _IETagNameGetCollection($oIE, "textarea")
For $oText In $oTexts
        ;MsgBox(0, "Form Text Type", "name: " & $oText.name & " id: " & $oText.id & " class: " & $oText.classname)
        If $oText.name == "productdescription" Then $oText.innertext = "111111111"
        If $oText.name == "productcontent" Then $oText.innertext = "22222222"
Next

komaau3 发表于 2013-2-19 02:00:39

本帖最后由 komaau3 于 2013-2-19 02:08 编辑

回复 1# cnergao
卡了。。。

komaau3 发表于 2013-2-19 02:01:07

本帖最后由 komaau3 于 2013-2-19 02:06 编辑

回复 1# cnergao
卡了。。。

haijie1223 发表于 2013-2-19 08:45:24

komaau3 已经给你回复了,问题应该解决了吧。
参考这个帖子:http://www.autoitx.com/forum.php?mod=viewthread&tid=37210&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D31

cnergao 发表于 2013-2-19 10:11:50

回复 10# komaau3

你这两种方法我之前也试过了。是可以写的。但是出现的位置不是在tinymce编辑器里。不可视。查询“productcontent.innertext"也是查得到的。1楼的截图看到没?最上面的“裤子裤子”是用_IEDocInsertHTML($oContent1,"裤子","afterend")输入的。位置在整个编辑器最上部。等于是在编辑器的外面了。

archangle 发表于 2013-2-21 10:24:15

请教一下,为什么使用WinActivate(""),与_IELoadWait有什么区别?谢谢!

cnergao 发表于 2013-2-21 12:47:17

本帖最后由 cnergao 于 2013-2-21 12:48 编辑

回复 15# archangle

$oIE = _IECreate ("http://127.0.0.1/product-add.php",1,1,1,0)
“在返回之前等待网页加载完毕”已经有_IELoadwait的效果。
WinActivate 激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).
不需要激活也没关系。可以后台操作的。只是测试中为了方便观看!
页: [1] 2
查看完整版本: [已解决]IE textarea 操作中如何往TinyMCE编辑框中写入内容?