문제

내 html 파일에서 JS에 링크했습니다.

src="myscript.js?config=true"

내 JS 가이 VAR의 가치를 직접 읽을 수 있습니까?

alert (config);

이것은 작동하지 않으며 Firefox Error Console은 "config가 정의되지 않았다"고 말합니다. JS 파일의 SRC 속성을 통해 전달 된 Vars를 어떻게 읽습니까? 이게 간단합니까?

도움이 되었습니까?

해결책

<script>
var config=true;
</script>
<script src="myscript.js"></script>

시도한 방식으로 변수를 JS에 전달할 수 없습니다. 스크립트 태그는 쿼리 문자열이있는 창 객체를 생성하지 않으며 서버 측 코드가 아닙니다.

다른 팁

예, 할 수는 있지만 스크립트에서 정확한 스크립트 파일 이름을 알아야합니다.

var libFileName = 'myscript.js',
    scripts = document.head.getElementsByTagName("script"), 
    i, j, src, parts, basePath, options = {};

for (i = 0; i < scripts.length; i++) {
  src = scripts[i].src;
  if (src.indexOf(libFileName) != -1) {
    parts = src.split('?');
    basePath = parts[0].replace(libFileName, '');
    if (parts[1]) {
      var opt = parts[1].split('&');
      for (j = opt.length-1; j >= 0; --j) {
        var pair = opt[j].split('=');
        options[pair[0]] = pair[1];
      }
    }
    break;
  }
}

당신은 이제 인수가 통과 된 '옵션'변수를 가지고 있습니다. 나는 그것을 테스트하지 않았고 조금 바꾸었다. http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js 그것이 작동하는 곳.

이 작업이 완료된 것을 보았을 수도 있지만 실제로 JS 파일은 PHP 또는 다른 언어를 먼저 사용하여 전처리 서버 측면입니다. 서버 측 코드는 변수 세트로 JavaScript를 인쇄/에코합니다. 스크립트 광고 서비스가 전에이 작업을 수행하는 것을 보았고, 평범한 ol 'JS로 수행 할 수 있는지 확인했지만 할 수는 없습니다.

스크립트의 SRC 속성을 찾으려면 JavaScript를 사용하고 '?'이후 변수를 구문 분석해야합니다. 프로토 타입을 사용하여 JS 프레임 워크가 보입니다 무엇 이와 같이:

var js = /myscript\.js(\?.*)?$/; // regex to match .js

var jsfile = $$('head script[src]').findAll(function(s) {
    return s.src.match(js);
}).each(function(s) {
    var path = s.src.replace(js, ''),
    includes = s.src.match(/\?.*([a-z,]*)/);
    config = (includes ? includes[1].split('=');
    alert(config[1]); // should alert "true" ??
});

내 JavaScript/Regex 기술은 녹슬지 만 이것이 일반적인 아이디어입니다. scriptaculous.js 파일에서 바로 찢어졌습니다!

그러나 스크립트는 자체 스크립트 노드를 찾아 SRC 속성을 검사하고 원하는 정보를 추출 할 수 있습니다.

  var scripts = document.getElementsByTagName ('script');
  for (var s, i = scripts.length; i && (s = scripts[--i]);) {
    if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) {
      alert ("Parameter string : '" + s[3] + "'");    
      break;
    } 
  }

이것이 해야하는지 아닌지, 공정한 질문이지만, 당신이 그것을하고 싶다면, http://feather.elektrum.org/book/src.html 실제로 방법을 보여줍니다. 스크립트 태그를 렌더링 할 때 브라우저 차단 (현재는 사실이지만 향후 증거가 아닐 수도 있음)을 가정하면 해당 스크립트는 항상 해당 시점까지 페이지의 마지막 스크립트입니다.

그런 다음 jQuery와 같은 일부 프레임 워크 및 플러그인을 사용합니다 http://plugins.jquery.com/project/parsequery 이것은 꽤 사소합니다. 아직 플러그인이 없다는 것에 놀랐습니다.

John Resig의 저하 스크립트 태그는 다소 관련이 있지만 초기화의 일부가 아니라 외부 스크립트 후 코드를 실행합니다. http://ejohn.org/blog/degrading-script-tags/

크레딧 : 매개 변수를 JavaScript 파일로 전달합니다 , 매개 변수를 JavaScript 파일로 전달합니다

글로벌 변수를 사용하는 것은 매우 깨끗하거나 안전한 솔루션이 아닙니다. 대신 Data-X 속성을 사용할 수 있습니다. 깨끗하고 안전합니다.

<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script>

MyFile.js에서 예를 들어 jQuery와 같은 데이터 매개 변수에 액세스 할 수 있습니다.

var parameter1 = $('script[src*="myfile.js"]').data('parameter_1');

분명히 "myfile.is"와 "parameter_1"은 두 소스에서 일치해야합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top