2

仕事でひどいUIを備えた製品を使用していて、ChromeのUserScriptを介してそれを口に合うようにしようとしています。そのために、私はUserScriptsメカニズムを介してJavaScript関数をページに挿入しようとしています。

// find the div
var dropDown = document.getElementById("tstGlobalNavigation_ddlChooseProject");

// inject function
dropDown.innerHTML = dropDown.innerHTML + "<script>function gotoIncident(){alert('111')}</script>";        

// inject a button
dropDown.innerHTML = dropDown.innerHTML + "&nbsp;&nbsp;&nbsp;<input type='button' name='btnSearch' value='Go' onClick='javascript:gotoIncident()' >";

ご覧のとおりgotoIncident、ユーザーがボタンをクリックすると起動するボタンと関数()を挿入しています。

ボタンは画面に表示されますが、クリックすると、javascriptデバッガーがgotoIncident定義されていないことを通知します。

私は何が欠けていますか?

4

3 に答える 3

8

自己呼び出し関数を含む に<script>タグを挿入します。<head>

var head = document.getElementsByTagName('head')[0],
    script = document.createElement('script');
    
script.src = 'path/to/script.js';    
head.appendChild(script);

参照されているスクリプトは次のようになります。

(function(){
    // do your stuff here    
})();

編集

インライン スクリプトとして実行する方法:

function fn() {
    alert('hello JS');
}

var head = ...,
    script = ...;
    
// FF doesn't support innerText
script[script.innerText ? 'innerText' : 'textContent'] = '(' + fn + ')()';
head.appendChild(script);

デモ

于 2011-04-06T23:46:44.643 に答える
0

どこでも使用するには、グローバル スコープで関数を定義する (<head> セクションに配置する) 必要があります。

于 2011-04-06T23:43:43.443 に答える
-3

参考までに、次の方法で解決しました。

myDiv.innerHTML = myDiv.innerHTML + " <input type='text' id='txtSearch' name='txtSearch' style='position:absolute;top:8px;left:800px;width:50px' >";
myDiv.innerHTML = myDiv.innerHTML + " <input type='button' name='btnSearch' value='Go' onclick='fn()' style='position:absolute;top:8px;left:860px;width:35px'>";

addScript("function fn() {var obj = document.getElementById('txtSearch'); "
  + "if (obj != null) { "
  + "  var incidentId = document.getElementById('txtSearch').value; "
  + "  var currentURL = location.href; "
  + "  var splitResult = currentURL.split('/'); "
  + "  var projectId = splitResult[4]; "
  + "  location.href = 'http://site/SpiraTeam/' + projectId + '/Incident/' + incidentId + '.aspx'; "
  + " } }"
  , "fn");

}

于 2011-05-12T18:40:50.337 に答える