- PR -

入力支援プログラムの作成方法について

投稿者投稿内容
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-12-08 20:52
引用:

IEであれば、ドメインが違えば無理ですね。


やはり無理でしたか、、、ドメイン違いのオブジェクト操作を許せば「なりすまし」
なんて危険もありますしね。
って事は、大概のブラウザではドメイン違いのオブジェクト操作は認めてはなさそうな。。

引用:

ローカルにプロキシ(DeleGate)サーバを立てて



なるほど。これならドメイン問題は解決しそうですね。
けれど、業務処理へのアクセスをプロキシ経由でってのはどんなもんなんでしょうね?
少なくとも「こそーっと」って訳にはいかないですよね(こそっとやろうとしている
かどうか知り得ない立場なくせに適当な事かいてます、、、失礼)

meltingpotさんのHttpUnitってのも面白そうですね、唯一Java絡みだしw
でも、同様にブラウザ指定が業務規定でなされていたりしたらこれも厳しそう。。。
一番現実味があるのが、かつのりさんのActiveX(?)かもしれませんね。
体験版しか持ってない私には検証するすべもありませんが(泣
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-12-08 20:57
二重投稿でした。失礼。

[ メッセージ編集済み 編集者: takamaro 編集日時 2004-12-08 21:10 ]
taro
ぬし
会議室デビュー日: 2003/10/20
投稿数: 316
投稿日時: 2004-12-09 09:21
takamaroさま、かつのりさま
ご指摘ありがとうございます。
両方ローカルで試していたので気づきませんでした。。。
くつさん、雑音すみません。
stabucky
会議室デビュー日: 2004/12/09
投稿数: 1
投稿日時: 2004-12-09 19:13
引用:

くつさんの書き込み (2004-12-08 12:45) より:
引用:

ほろりんさんの書き込み (2004-12-07 11:08) より:
このページの作者様のプログラムを参考にされてはいかがでしょうか?
http://stabucky.blogzine.jp/stabucky/2004/09/sleipnir_1.html


ありがとうございます。
ラブブラウザがどういったものかも知らないのですが、
かなりヒントがいただけそうです。
早速分析してみます。



ずいぶんレベルの高い会議室ですね。びびっております。

Sleipnirはタブブラウザをして知られていますが
スクリプトが使えるという利点もあります。
Sleipnirのスクリプトを使うならば次のようなスクリプトが使えます。

var pnir=new ActiveXObject("Sleipnir.API");
var id=pnir.GetDocumentID(pnir.ActiveIndex);
var document=pnir.GetDocumentObject(id);
//1番目(インデックス0)のボックスを指定して
document.all.tags("input").item(0).value="abcde";
//nameが"data2"のボックスを探して
for(i=0;i<document.all.tags("input").length;i++){
if(document.all.tags("input").item(i).name=="data2"){
document.all.tags("input").item(i).value="fghij";
}
}

二通りの方法を書いています。
一つ目は何番目のボックスかを指定してセットする方法です。
決まったページにはこの方法でよいと思います。
ここではabcdeという文字列をセットしています。

二つ目はボックスを片っ端から探して
nameが一致するものにセットする方法です。
不特定のページにはこの方法でよいと思います。
ここではdata2と名付けられたボックスにfghijという文字列を
セットしています。

難点は処理が遅いことです。
大量の処理を行うならば厳しいかもしれません。

idやメールアドレスをセットするにはとても便利です。
くつ
常連さん
会議室デビュー日: 2004/05/05
投稿数: 30
投稿日時: 2004-12-09 19:14
みなさん、ありがとうございます。

taroさんが書いていただいたJavaScriptについては、
簡単そうで「なんとか私にも出来そうだ!」と思ったのですが、
ドメインの違いが問題ですか。。。
(地方から東京にあるサーバをつつくので)

もう少し調べてみます。
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2004-12-09 21:22
HTAファイルにすれば、ドメインが違う問題は乗り越えられます。
コード:
<HTML>
<HEAD>
<HTA:APPLICATION>
</HEAD>
<FRAMESET rows="10%,*">
<FRAME name="helper" src="helper.htm" application="yes">
<FRAME name="main"   src="イントラネットのURL">
</FRAMESET>
</HTML>


こういう感じのファイルを hoge.hta というファイル名でローカルに置いて、そこから起動します。
あとの処理は、taroさんの方法のままです。

こうしておけば、helper.htm 中のjavaScriptからローカルなCSVファイルをオープンして
読み込むこと等もできるので、スクリプトだけで全部処理できます。

詳しくは、
http://www.asia.microsoft.com/japan/msdn/workshop/author/hta/overview/htaoverview.asp
takamaro
大ベテラン
会議室デビュー日: 2004/10/12
投稿数: 100
投稿日時: 2004-12-11 07:30
おおー!凄い。HTAにすると動きますね!これは知りませんでしたよ。
(JavaScriptとTDCで作ったサンプルが無駄にならずに済んだw)
以下に前回作った失敗作をHTAに変換(殆どそのままですが、、)して載せておきます。

コード:

<html>
<head>
<title>Csv2Form</title>
<hta:application navigable="yes"/>
<script language="JavaScript">
<!--
var rs;
function initialize() {
  nextbtn.disabled=true;
  previousbtn.disabled=true;
  insertbtn.disabled=true;
  var filesrc = filedialog.value;
  var filetype = filesrc.substring(filesrc.lastIndexOf("."), filesrc.length).toLowerCase();
  if (filetype != ".csv") {
    setCounterText(0, 0);
    alert("このファイルの拡張子は.CSVではありません" );
    return ;
  }
  var tabular = document.getElementById("tdc");
  tabular.DataURL = filesrc;
  tabular.Reset();
  rs = tabular.recordset;
  setCounterText(rs.AbsolutePosition, rs.RecordCount);
  if (rs.RecordCount <= 0) {
    alert("レコードがありません");
    return;
  }
  else if (rs.RecordCount > 1) {
    nextbtn.disabled=false;
  }
  insertbtn.disabled=false;
}
function insertRecord() {
  var forms = document.frames("targetframe").document.getElementsByTagName("form");
  for (i=0; i<rs.Fields.Count; i++) {
    for (j=0; j<forms.length; j++) {
      var inputElements = forms[j].getElementsByTagName("input");
      for (k=0; k<inputElements.length; k++) {
        if (inputElements[k].type.toLowerCase() == "text" && inputElements[k].name.toLowerCase() == rs.Fields(i).Name.toLowerCase()) {
          inputElements[k].value = rs.Fields(i).Value;
        }
      }
    }
  }
}
function nextRecord() {
  rs.MoveNext();
  setCounterText(rs.AbsolutePosition, rs.RecordCount);
  if (rs.RecordCount <= rs.AbsolutePosition) {
    nextbtn.disabled=true;
  }
  previousbtn.disabled=false;
}
function previousRecord() {
  rs.MovePrevious();
  setCounterText(rs.AbsolutePosition, rs.RecordCount);
  if (rs.AbsolutePosition <= 1) {
    previousbtn.disabled=true;
  }
  nextbtn.disabled=false;
}
function setCounterText(position, count) {
  counter.innerText = position + "件目" + "/" + count + "件中";
}
//-->
</script>
</head>
<body style="margin: 2 2 0 2;">
<object id="tdc" classid="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83">
  <param name="UseHeader" value="true">
</object>
<label for="filedialog">File : </label> 
<input type="file" name="datafile" id="filedialog" size="70">
<input type="button" id="resetbtn" value="リセット" onClick="initialize();">
<nobr>
<input type="button" id="previousbtn" value="<<" disabled="true" onClick="previousRecord()">
<span id="counter">0件目/0件中</span>
<input type="button" id="nextbtn" value=">>" disabled="true" onClick="nextRecord()">
<input type="button" id="insertbtn" value="挿入" disabled="true" onClick="insertRecord()">
</nobr>
<iframe id="targetframe" src="******"  width="100%" height="95%" application="yes">
</iframe>
</body>
</html>


うはー、長い、、、。一応動くとは思うのですが、JavaScriptどころかHTMLすら
まともに学んだことがない人間なもので「?」な点が多々あるとは思いますが、ご勘弁を。
問題はIFRAMEのsrcなんですが、リンク集みたいなHTMLファイルを作っておいて、
それをsrcに指定すれば何とかなるかなと思います(もっと良い方法もありそう、、)
使い方は、「参照」->ファイル選択->「リセット」->「挿入」->「>>」->.......
という手順になります。

で、私の能力では解決出来ず放置したままの大問題があります。

HTAとして実行すると、ブラウザの「戻る」「進む」ボタンが表示されません。
historyで代替しようと思ったのですが、どうも上手くいかないのです。。。。
どなたか、解決策をご指導願えればありがたいです。宜しくお願い致します。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2004-12-11 11:12
targetframe.window.history.forward
targetframe.window.history.back
でターゲットのフレーム内だけ「戻る」「進む」が可能なはずです。

スキルアップ/キャリアアップ(JOB@IT)