"응용 프로그램/javascript"형식의 스크립트를 처리하면 삭제될 수도 있습니다

7393 단어 html-minifier
이 페이지의 출처는

묘사

테스트 파일입니다.https://www.engadget.com/2016/07/24/ben-heck-s-nintendo-playstation-prototype-teardown-part-1/
그것의 대부분 스크립트는 text/javascript이다.또 하나는 application/javascript형.그것은 HTML 주석 문법으로 함수를 봉인했다.
처리할 스크립트 목록에 appplication/javascript을 추가하면 전체 스크립트가 삭제됩니다.application/javascript이 처리할 유형에 추가되지 않은 경우 스크립트는 여전히 처리되지만 삭제되지는 않습니다.예상치 못한 일들이 여전히 발생하고 있다.
- 유형 속성이 삭제됩니다.문서에 따라 text/javascript 유형만 삭제해야 합니다.
- 스크립트를 실제로 처리하고 축소합니다. 공백과 HTML 주석 구문을 제거합니다.우리가 그것을 알려주지 않으면, 그것은 이런 유형을 처리해서는 안 된다.스크립트이기 때문에 HTML 주석 문법에 대해 아무것도 하지 말아야 할 수도 있습니다. JS 주석만 찾아야 합니다. 있다면.
다음은 원본 스크립트입니다.
<script type='application/javascript'><!--
function runOmni(){
s_265.pfxID="weg";
s_265.pageName=s_265.pfxID+' : '+"Ben Heck's\u00a0Nintendo PlayStation prototype teardown, part 1";
s_265.server=location.protocol+'//'+location.host;
s_265.channel="us.engadget";
s_265.linkInternalFilters="javascript:,engadget.com,joystiq.com,massively.com,tuaw.com,switched.com,techcrunch.com";
s_265.mmxgo=true;
s_265.prop12=document.location;
s_265.prop1="article";
s_265.prop2="gaming";
s_265.prop8="bss:21";
s_265.prop45="aws";
s_265.prop54="blogsmith";
s_265.prop62="video_5min_entrybody";
s_265.prop9="bsd:21433957";
s_265.prop18="gaming|sony|nintendo|gear|av|diy";
s_265.prop19="av|benheck|benheckshow|diy|do it yourself|doityourself|element14|gaming|gear|nintendo|partner|sfx-100|sony|syndicated|teardown|thebenheckshow|video|@av|@badge-video|@company-nintendo|@company-sony|@DIY|@element14|@features|@gaming|@gear|@livefyre|@swipe-featuredvideo|@uk";
s_265.prop22="element14";
s_265.prop23="07-24-2016";
s_265.prop65="original_content";
s_265.t();
}
var s_account="aolwbengadget,aolsvc";

var bN_cfg={h:location.hostname,p:{"dL_ch":"us.engadget","dL_dpt":document.title,"dL_sDpt":document.title,"cms_src":"AMP","dL_siteID":"bss:21","dL_cmsID":"bsd:21433957","dL_categories":"gaming|sony|nintendo|gear|av|diy","dL_tags":"av|benheck|benheckshow|diy|do it yourself|doityourself|element14|gaming|gear|nintendo|partner|sfx-100|sony|syndicated|teardown|thebenheckshow|video|@av|@badge-video|@company-nintendo|@company-sony|@DIY|@element14|@features|@gaming|@gear|@livefyre|@swipe-featuredvideo|@uk","dL_author":"element14","dL_published":"07-24-2016","dL_source":"original_content","dL_vid":"video_5min_entrybody"}};
(function(d){var s=d.createElement('script'),h=d.getElementsByTagName('head')[0];s.src='//s.aolcdn.com/os_merge/?file=/aol/omniture.min.js&file=/aol/beacon.min.js';h.appendChild(s);})(document);//--></script>
다음은 처리할 스크립트 유형에 추가되지 않은 application/javascript의 HTML 축소판 출력입니다.
<script>function runOmni(){s_265.pfxID="weg",s_265.pageName=s_265.pfxID+" : Ben Heck's Nintendo PlayStation prototype teardown, part 1",s_265.server=location.protocol+"//"+location.host,s_265.channel="us.engadget",s_265.linkInternalFilters="javascript:,engadget.com,joystiq.com,massively.com,tuaw.com,switched.com,techcrunch.com",s_265.mmxgo=!0,s_265.prop12=document.location,s_265.prop1="article",s_265.prop2="gaming",s_265.prop8="bss:21",s_265.prop45="aws",s_265.prop54="blogsmith",s_265.prop62="video_5min_entrybody",s_265.prop9="bsd:21433957",s_265.prop18="gaming|sony|nintendo|gear|av|diy",s_265.prop19="av|benheck|benheckshow|diy|do it yourself|doityourself|element14|gaming|gear|nintendo|partner|sfx-100|sony|syndicated|teardown|thebenheckshow|video|@av|@badge-video|@company-nintendo|@company-sony|@DIY|@element14|@features|@gaming|@gear|@livefyre|@swipe-featuredvideo|@uk",s_265.prop22="element14",s_265.prop23="07-24-2016",s_265.prop65="original_content",s_265.t()}var s_account="aolwbengadget,aolsvc",bN_cfg={h:location.hostname,p:{dL_ch:"us.engadget",dL_dpt:document.title,dL_sDpt:document.title,cms_src:"AMP",dL_siteID:"bss:21",dL_cmsID:"bsd:21433957",dL_categories:"gaming|sony|nintendo|gear|av|diy",dL_tags:"av|benheck|benheckshow|diy|do it yourself|doityourself|element14|gaming|gear|nintendo|partner|sfx-100|sony|syndicated|teardown|thebenheckshow|video|@av|@badge-video|@company-nintendo|@company-sony|@DIY|@element14|@features|@gaming|@gear|@livefyre|@swipe-featuredvideo|@uk",dL_author:"element14",dL_published:"07-24-2016",dL_source:"original_content",dL_vid:"video_5min_entrybody"}};!function(e){var o=e.createElement("script"),n=e.getElementsByTagName("head")[0];o.src="//s.aolcdn.com/os_merge/?file=/aol/omniture.min.js&file=/aol/beacon.min.js",n.appendChild(o)}(document)</script>
처리할 유형에 application/javascript을 추가하면 전체 내용만 삭제됩니다.
이 스크립트는 함수 주위에 HTML 주석 구문(예: <!--)을 사용합니다.그게 관건이야.주석 박리 기능은 스크립트를 삭제하는 것 같지만 HTML이 아닌 스크립트이기 때문에 삭제하지 말아야 할 수도 있습니다.(주석 문법은 전체 스크립트를 포함하지 않기 때문에 왜 전체 스크립트, type 속성을 포함하여 모두 사라졌습니까? 이것은 빈 요소가 되었기 때문일 수 있습니다.)
만약 우리가 이 스크립트를 처리하지 못하게 한다면, 그것은 사실상 그것들을 처리하고 있지만, 주석 문법에 따라 그것들을 삭제하지 않는다. 이것은 일치하지 않는다.
예상 동작:
1. 스크립트에서 HTML 주석을 무시합니다.
2. 우리가 스크립트 유형을 처리 옵션에 추가하지 않으면 text/javascript 이외의 스크립트를 처리하지 않습니다.

토론 #1

에서는 JavaScript 세션이 아닌 HTML 템플릿에 사용되는 processScripts을 가정합니다.

토론 #2

우리는 <script type=...>의 모든 기본값을 삭제했기 때문에 application/javascript

토론 #셋

을 포함한다. 따라서 상술한 상황을 감안하여 나는 이것이 processScripts의 의미를 오해하는 상황이라고 생각한다. 우리는 자바스크립트 블록을 처리한다. 지원하는 type 속성 값의 하나로 지정하기만 하면 된다.
이것은 실제로 어떤 용례를 깨뜨렸습니까?

토론 #4

이 예상대로 종료되었습니다.만약 그렇지 않다면 다시 열어 주세요.

토론 #5

나는 이 평론들이 문서와 모순되기 때문에 곤혹스러웠다.너는 사람들로 하여금 구린내 나는 벌레를 분류하여 보관하게 하고 싶니?이것은 잘못이다.
1. 스크립트 형식 속성을 삭제할 때 문서에 "스크립트 표시에서 type="text/javascript "를 삭제합니다. 다른 형식 속성 값은 변하지 않습니다."
잘 알고 있습니다.다른 유형의 값은 변하지 않아야 한다.
프로세스 스크립트 기능에서 doc는 "minifier를 통해 처리할 스크립트 요소 형식에 대응하는 문자열 그룹 (예를 들어 text/ng 템플릿, text/x-handlebar-template 등)"이라고 말했다.
2. 스크립트 요소를 말합니다.이러한 예는 텍스트 요소, 특히 템플릿 언어이지만 설명에 스크립트 요소가 언급되어 있기 때문에 스크립트를 처리해야 한다.
사실 그것은 스크립트를 확실히 처리한다.JSON-LD도 처리하는데 최근에 많이 생겼어요.나는 그것으로 같은 원본 파일에서 JSON-LD를 처리한다. (정식 형식은 '응용 프로그램/LD + JSON' 이다.)
그것은 템플릿 언어를 처리할 뿐만 아니라 문서도 템플릿만 처리한다고 말하지 않았다.템플릿만 처리하려는 의도가 있다면, 프로그램이 바뀌어야 하고, 문서가 업데이트되기를 바랍니다.
나는 <script type=...>의 기본값이 무슨 뜻인지 모르겠다.문서나 웹 프로그램에 스크립트 형식의 기본값을 설정하는 내용이 없습니다.나는 어느 곳에서도 기본값을 설정한 적이 없다.문서는 하드 인코딩의 기본값 (text/javascript) 만 있음을 암시하고 원본 테스트 파일은 몇 가지 다른 형식이 있습니다.

토론 #6

PRs를 제출하여 문서를 개선하신 것을 환영합니다.

좋은 웹페이지 즐겨찾기